emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 047c1b1: * lisp/eshell/em-cmpl.el: Use completion-a


From: Stefan Monnier
Subject: [Emacs-diffs] master 047c1b1: * lisp/eshell/em-cmpl.el: Use completion-at-point i.s.o pcomplete
Date: Tue, 19 Mar 2019 23:41:40 -0400 (EDT)

branch: master
commit 047c1b19353ff58d8cd45935c7b44c911b70e312
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>

    * 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.
---
 doc/misc/eshell.texi   | 17 ++++++++---------
 etc/NEWS               |  5 +++++
 lisp/eshell/em-cmpl.el | 38 ++++++++++++++------------------------
 3 files changed, 27 insertions(+), 33 deletions(-)

diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi
index ce3a30c..716b4b7 100644
--- a/doc/misc/eshell.texi
+++ b/doc/misc/eshell.texi
@@ -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
address@hidden 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
diff --git a/etc/NEWS b/etc/NEWS
index f955308..6b132eb 100644
--- 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
diff --git a/lisp/eshell/em-cmpl.el b/lisp/eshell/em-cmpl.el
index cd5c14a..25a6e88 100644
--- a/lisp/eshell/em-cmpl.el
+++ b/lisp/eshell/em-cmpl.el
@@ -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)
 



reply via email to

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