Amumu
Amumu

Reputation: 18552

Make eshell tab completion behave like Bash

How can I make eshell autocomplete behave like Bash and Emacs in general i.e. it offers a list of choices rather than arbitrary selects one for you?

For example, if I have two directories "Download" and "Downloads", when I type "Down" and hit TAB, I expect another buffer pops up and shows me the choices. But eshell just completes it for me, i.e. if I press TAB, it completes to "Download"; hit TAB again, it changes to "Downloads".

Upvotes: 14

Views: 5068

Answers (3)

xuhdev
xuhdev

Reputation: 9333

You only need to have the following line:

(setq eshell-cmpl-cycle-completions nil)

eshell-mode automatically set pcomplete-cycle-completions to the value of eshell-cmpl-cycle-completions locally.

Upvotes: 3

Sean Perry
Sean Perry

Reputation: 3886

(add-hook
 'eshell-mode-hook
 (lambda ()
   (setq pcomplete-cycle-completions nil)))

and

(setq eshell-cmpl-cycle-completions nil)

Both do as you ask and show a buffer listing the completions when I run my emacs as 'emacs -q' to avoid my own customizations. This is with emacs 23.3, are you running a much older version?

Also see http://www.emacswiki.org/emacs/EshellCompletion which is where I first went to check this out.

Steps to try this out:

  1. Start emacs using 'emacs -q' as the command -- no other arguments.
  2. Change to the *scratch* buffer
  3. Paste or type in one of the above code snippets
  4. Put your cursor at the end of the snippet and press 'C-e' to execute the code.
  5. Start eshell
  6. test
  7. if neither one works, report back here with your version info and any other relevant details

Upvotes: 6

abo-abo
abo-abo

Reputation: 20342

Use this:

(add-hook
 'eshell-mode-hook
 (lambda ()
   (setq pcomplete-cycle-completions nil)))

Upvotes: 6

Related Questions