* lisp/eshell/em-cmpl.el: Use completion-at-point i.s.o pcomplete
(eshell-cmpl-initialize): Refrain from binding to the `tab` key, which prevents the tab -> TAB remapping. Use completion-at-point and completion-help-at-point. (eshell-complete-commands-list): Use `fboundp` test instead of ugly gymnastics to try and hide the function call from the compiler. (eshell-pcomplete): Make it an alias of completion-at-point. * doc/misc/eshell.texi (Completion): Change wording to reflect different default behavior.
This commit is contained in:
parent
e14c0d748e
commit
047c1b1935
3 changed files with 26 additions and 32 deletions
|
@ -499,15 +499,14 @@ be directories @emph{and} files. Eshell provides predefined completions
|
|||
for the built-in functions and some common external commands, and you
|
||||
can define your own for any command.
|
||||
|
||||
Eshell completion also works for lisp forms and glob patterns. If the
|
||||
point is on a lisp form, then @key{TAB} will behave similarly to completion
|
||||
in @code{elisp-mode} and @code{lisp-interaction-mode}. For glob
|
||||
patterns, If there are few enough possible completions of the patterns,
|
||||
they will be cycled when @key{TAB} is pressed, otherwise it will be removed
|
||||
from the input line and the possible completions will be listed.
|
||||
Eshell completion also works for lisp forms and glob patterns. If the point is
|
||||
on a lisp form, then @key{TAB} will behave similarly to completion in
|
||||
@code{elisp-mode} and @code{lisp-interaction-mode}. For glob patterns, the
|
||||
pattern will be removed from the input line, and replaced by the
|
||||
completion.
|
||||
|
||||
If you want to see the entire list of possible completions when it's
|
||||
below the cycling threshold, press @kbd{M-?}.
|
||||
If you want to see the entire list of possible completions (e.g. when it's
|
||||
below the @code{completion-cycle-threshold}), press @kbd{M-?}.
|
||||
|
||||
@subsection pcomplete
|
||||
Pcomplete, short for programmable completion, is the completion
|
||||
|
|
5
etc/NEWS
5
etc/NEWS
|
@ -985,6 +985,11 @@ default, and not just the opening element.
|
|||
|
||||
** Eshell
|
||||
|
||||
*** TAB completion uses the standard completion-at-point rather than pcomplete
|
||||
Its UI is slightly different but can be customized to behave similarly,
|
||||
e.g. Pcomplete's default cycling can be obtained with
|
||||
(setq completion-cycle-threshold 5).
|
||||
|
||||
---
|
||||
*** Expansion of history event designators is disabled by default.
|
||||
To restore the old behavior, use
|
||||
|
|
|
@ -288,9 +288,10 @@ to writing a completion function."
|
|||
(function
|
||||
(lambda ()
|
||||
(set (make-local-variable 'comint-file-name-quote-list)
|
||||
eshell-special-chars-outside-quoting))) nil t)
|
||||
(add-hook 'pcomplete-quote-arg-hook 'eshell-quote-backslash nil t)
|
||||
(define-key eshell-mode-map [(meta tab)] 'eshell-complete-lisp-symbol)
|
||||
eshell-special-chars-outside-quoting)))
|
||||
nil t)
|
||||
(add-hook 'pcomplete-quote-arg-hook #'eshell-quote-backslash nil t)
|
||||
;;(define-key eshell-mode-map [(meta tab)] 'eshell-complete-lisp-symbol) ; Redundant
|
||||
(define-key eshell-mode-map [(meta control ?i)] 'eshell-complete-lisp-symbol)
|
||||
(define-key eshell-command-map [(meta ?h)] 'eshell-completion-help)
|
||||
(define-key eshell-command-map [tab] 'pcomplete-expand-and-complete)
|
||||
|
@ -298,15 +299,14 @@ to writing a completion function."
|
|||
'pcomplete-expand-and-complete)
|
||||
(define-key eshell-command-map [space] 'pcomplete-expand)
|
||||
(define-key eshell-command-map [? ] 'pcomplete-expand)
|
||||
(define-key eshell-mode-map [tab] 'eshell-pcomplete)
|
||||
(define-key eshell-mode-map [(control ?i)] 'eshell-pcomplete)
|
||||
;;(define-key eshell-mode-map [tab] 'completion-at-point) ;Redundant!
|
||||
(define-key eshell-mode-map [(control ?i)] 'completion-at-point)
|
||||
(add-hook 'completion-at-point-functions
|
||||
#'pcomplete-completions-at-point nil t)
|
||||
;; jww (1999-10-19): Will this work on anything but X?
|
||||
(if (featurep 'xemacs)
|
||||
(define-key eshell-mode-map [iso-left-tab] 'pcomplete-reverse)
|
||||
(define-key eshell-mode-map [backtab] 'pcomplete-reverse))
|
||||
(define-key eshell-mode-map [(meta ??)] 'pcomplete-list))
|
||||
(define-key eshell-mode-map
|
||||
(if (featurep 'xemacs) [iso-left-tab] [backtab]) 'pcomplete-reverse)
|
||||
(define-key eshell-mode-map [(meta ??)] 'completion-help-at-point))
|
||||
|
||||
(defun eshell-completion-command-name ()
|
||||
"Return the command name, possibly sans globbing."
|
||||
|
@ -442,34 +442,24 @@ to writing a completion function."
|
|||
(if glob-name
|
||||
completions
|
||||
(setq completions
|
||||
(append (and (eshell-using-module 'eshell-alias)
|
||||
(funcall (symbol-function 'eshell-alias-completions)
|
||||
filename))
|
||||
(append (if (fboundp 'eshell-alias-completions)
|
||||
(eshell-alias-completions filename))
|
||||
(eshell-winnow-list
|
||||
(mapcar
|
||||
(function
|
||||
(lambda (name)
|
||||
(substring name 7)))
|
||||
(all-completions (concat "eshell/" filename)
|
||||
obarray 'functionp))
|
||||
obarray #'functionp))
|
||||
nil '(eshell-find-alias-function))
|
||||
completions))
|
||||
(append (and (or eshell-show-lisp-completions
|
||||
(and eshell-show-lisp-alternatives
|
||||
(null completions)))
|
||||
(all-completions filename obarray 'functionp))
|
||||
(all-completions filename obarray #'functionp))
|
||||
completions)))))))
|
||||
|
||||
(defun eshell-pcomplete (&optional interactively)
|
||||
"Eshell wrapper for `pcomplete'."
|
||||
(interactive "p")
|
||||
;; Pretend to be pcomplete so that cycling works (bug#13293).
|
||||
(setq this-command 'pcomplete)
|
||||
(condition-case nil
|
||||
(if interactively
|
||||
(call-interactively 'pcomplete)
|
||||
(pcomplete))
|
||||
(text-read-only (completion-at-point)))) ; Workaround for bug#12838.
|
||||
(define-obsolete-function-alias 'eshell-pcomplete #'completion-at-point "27.1")
|
||||
|
||||
(provide 'em-cmpl)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue