diff options
Diffstat (limited to 'lisp/shell.el')
-rw-r--r-- | lisp/shell.el | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/lisp/shell.el b/lisp/shell.el index cba50038bc0..53455944ee6 100644 --- a/lisp/shell.el +++ b/lisp/shell.el @@ -1074,12 +1074,15 @@ Returns t if successful." (list start end (lambda (string pred action) - (completion-table-with-terminator - " " (lambda (string pred action) - (if (string-match "/" string) - (completion-file-name-table string pred action) - (complete-with-action action completions string pred))) - string pred action))))) + (if (string-match "/" string) + (completion-file-name-table string pred action) + (complete-with-action action completions string pred))) + :exit-function + (lambda (_string finished) + (when (memq finished '(sole finished)) + (if (looking-at " ") + (goto-char (match-end 0)) + (insert " "))))))) ;; (defun shell-dynamic-complete-as-command () ;; "Dynamically complete at point as a command. @@ -1150,18 +1153,17 @@ Returns non-nil if successful." (substring x 0 (string-match "=" x))) process-environment)) (suffix (case (char-before start) (?\{ "}") (?\( ")") (t "")))) - (list - start end - (apply-partially - #'completion-table-with-terminator - (cons (lambda (comp) - (concat comp - suffix - (if (file-directory-p - (comint-directory (getenv comp))) - "/"))) - "\\`a\\`") - variables)))))) + (list start end variables + :exit-function + (lambda (s finished) + (when (memq finished '(sole finished)) + (let ((suf (concat suffix + (if (file-directory-p + (comint-directory (getenv s))) + "/")))) + (if (looking-at (regexp-quote suf)) + (goto-char (match-end 0)) + (insert suf)))))))))) (defun shell-c-a-p-replace-by-expanded-directory () |