]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/eshell/em-cmpl.el: Use completion-at-point i.s.o pcomplete
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 20 Mar 2019 03:41:20 +0000 (23:41 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 20 Mar 2019 03:41:20 +0000 (23:41 -0400)
(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.

doc/misc/eshell.texi
etc/NEWS
lisp/eshell/em-cmpl.el

index ce3a30c3a9ea2f349f37ee3ba01aad138aa3406b..716b4b7a50d522d200a03bd741e7247ac6e16294 100644 (file)
@@ -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.
-
-If you want to see the entire list of possible completions when it's
-below the cycling threshold, press @kbd{M-?}.
+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 (e.g. when it's
+below the @code{completion-cycle-threshold}), press @kbd{M-?}.
 
 @subsection pcomplete
 Pcomplete, short for programmable completion, is the completion
index f955308ebe560617b74da3b19afef02494d1adc4..6b132eb41d7763557e3db8775c818abb62356cce 100644 (file)
--- a/etc/NEWS
+++ b/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
index cd5c14afbe61da79f26b827090c07dfcd3a0f7f4..25a6e88c8e610bb4bd1e6bee68a3ba6b7ed55b27 100644 (file)
@@ -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)