summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2020-09-27 22:07:14 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2020-09-27 22:07:14 -0400
commitba42f7932419c3c8b1e23f39c81a1a2dd1b3a154 (patch)
tree22b47a0136a040ce4edde8079e8efc3afe5ef3dd
parent4155ca273ade47bc7e19fe4af1f41c4e764a59ba (diff)
downloademacs-ba42f7932419c3c8b1e23f39c81a1a2dd1b3a154.tar.gz
Fix pcomplete completion of things like `xargs` and `sudo` (bug#16197)
* lisp/pcmpl-unix.el (pcomplete/xargs): Don't `pcomplete-this` around `pcomplete-command-completion-function`. (pcomplete/sudo): Make it an alias for `pcomplete/xargs`. * lisp/shell.el (shell-command-completion-function): Return the names from `exec-path` when the command name has no `/`.
-rw-r--r--lisp/pcmpl-unix.el6
-rw-r--r--lisp/shell.el9
2 files changed, 11 insertions, 4 deletions
diff --git a/lisp/pcmpl-unix.el b/lisp/pcmpl-unix.el
index 74f45b95233..9d346cfbd22 100644
--- a/lisp/pcmpl-unix.el
+++ b/lisp/pcmpl-unix.el
@@ -82,10 +82,14 @@ being via `pcmpl-ssh-known-hosts-file'."
;;;###autoload
(defun pcomplete/xargs ()
"Completion for `xargs'."
- (pcomplete-here (funcall pcomplete-command-completion-function))
+ ;; FIXME: Add completion of xargs-specific arguments.
+ (funcall pcomplete-command-completion-function)
(funcall (or (pcomplete-find-completion-function (pcomplete-arg 1))
pcomplete-default-completion-function)))
+;; FIXME: Add completion of sudo-specific arguments.
+(defalias 'pcomplete/sudo #'pcomplete/xargs)
+
;;;###autoload
(defalias 'pcomplete/time 'pcomplete/xargs)
diff --git a/lisp/shell.el b/lisp/shell.el
index 9667dab2afd..6129e5efc84 100644
--- a/lisp/shell.el
+++ b/lisp/shell.el
@@ -460,9 +460,12 @@ Thus, this does not include the shell's current directory.")
This is the value of `pcomplete-command-completion-function' for
Shell buffers. It implements `shell-completion-execonly' for
`pcomplete' completion."
- (pcomplete-here (pcomplete-entries nil
- (if shell-completion-execonly
- 'file-executable-p))))
+ (if (pcomplete-match "/")
+ (pcomplete-here (pcomplete-entries nil
+ (if shell-completion-execonly
+ 'file-executable-p)))
+ (pcomplete-here
+ (nth 2 (shell--command-completion-data)))))
(defun shell-completion-vars ()
"Setup completion vars for `shell-mode' and `read-shell-command'."