help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: bash and reverse-search-history


From: Drew Adams
Subject: RE: bash and reverse-search-history
Date: Sat, 22 Apr 2006 13:27:26 -0700

Hello Baurzhan,

    > Icicles lets you search the entire history (your #2),
    > updating matches as you type (your #1).

    This looks interesting. I wanted to try it, however I couldn't find out
    how to invoke it. I downloaded the *.el files mentioned, put them into
    ~/.elisp/load, and added the following lines to my ~/.emacs:

    (add-to-list 'load-path (expand-file-name "~/.elisp/load"))
    (load-library "icicles.el")

After you load Icicles you are automatically in Icicle mode, unless
`define-minor-mode' is not defined in your version of Emacs, in which case
you can put this in your .emacs (it doesn't hurt to do this anyway): (when
(fboundp 'icicle-mode) (icicle-mode 99)). Whenever you are in Icicle mode,
you will see "Icy" in the mode line minor-mode list. Command `icicle-mode'
enters and exits the mode.

In Icicle mode, minibuffer completion is enhanced in several ways, including
matching minibuffer history items, with incremental update of the list of
possible completions.

    I start emacs, M-x shell RET, and get the shell prompt. I've read some
    of the wiki pages, but it isn't clear for me how I can use Icicles. The
    page about history doesn't mention shell at all, only minibuffer
    completions. Any idea?

I haven't used the Emacs shell in years. I guess I was thinking that you
were inputting stuff through the minibuffer - sorry to have misled you.
Icicles works with any minibuffer input, but I imagine that you won't get
many Icicles features out of the box with comint (shell command line)
completion, which does not use the minibuffer.

I did enhance dabbrev completion (which, like comint completion, does not
use the minibuffer) to be able to take advantage of some Icicles features,
but I haven't yet done that for comint (shell) completion.

Trying shell command completion just now, I notice that about the only thing
you get for free is Icicles candidate cycling, which isn't all that helpful
here. Comint completion apparently does its own matching, so it can't
automatically take advantage of Icicles completion features like regexp
matching. And there is no way to use the Icicles minibuffer history
enhancements with the (non-minibuffer) shell history. With some Emacs-Lisp
programming, you could probably cobble together some of the Icicles
functions to get yourself something workable, but I'm sorry that I don't
have time to work on this.

So I guess the short answer is that you won't get what you want with
Icicles, until I get around to tweaking comint completion so that it can use
Icicles features. Sorry for the false route.

    In bash, you can press C-r, and type, e.g., "dpkg". As you type each
    character, bash shows the most recent command that matches the
    expression you've typed up to that moment.

    In emacs, I press M-r, it asks for a regexp, I type "dpkg". Nothing is
    updated as I type, emacs waits for me to press RET to start searching. I
    press RET, it finds the last dpkg command, which happens to be the 29th.
    I see it isn't what I was looking for, and want to repeat the search. I
    have to press M-r dpkg RET again (this is the "next run" I'd mentioned
    in the first posting; "modifying" it is about the case you are not
    satisfied with your initial regexp and want to enter a more specific one
    instead of the one you typed at first). Or, I can press M-r M-r RET RET,
    and emacs will search again. But only 32 commands back?!

    So, what I'm looking for is more or less exactly bash's C-r
    functionality. Can I perhaps just unbind emacs's C-r for shell buffers,
    so that the character is passed to bash?

The incremental completion update you describe is available in Icicles
(which is why I replied to you) for both standard prefix matching and regexp
matching, but only for minibuffer completion. Sorry.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]