diff options
author | Lars Ingebrigtsen <larsi@gnus.org> | 2020-08-14 13:29:52 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2020-08-14 13:29:59 +0200 |
commit | 1b8d369c381b5a63e40529d0d95dfa75d94b8e09 (patch) | |
tree | 7726c2a30459e5db8ac31f76b2878a4f3f11dad6 /lisp | |
parent | 744e97ce6d9fc5c3f8653e4840b00ef0cd14278f (diff) | |
download | emacs-1b8d369c381b5a63e40529d0d95dfa75d94b8e09.tar.gz emacs-1b8d369c381b5a63e40529d0d95dfa75d94b8e09.tar.bz2 emacs-1b8d369c381b5a63e40529d0d95dfa75d94b8e09.zip |
Change icomplete-show-matches-on-no-input behavior
* lisp/icomplete.el (icomplete-show-matches-on-no-input): Doc fix.
(icomplete-completions): Set completion-content-when-empty.
* lisp/minibuffer.el (completion-content-when-empty): New variable.
(completion--complete-and-exit): Use it (bug#19032).
Based on a patch by Matthew Leach <matthew@mattleach.net>.
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/icomplete.el | 11 | ||||
-rw-r--r-- | lisp/minibuffer.el | 10 |
2 files changed, 17 insertions, 4 deletions
diff --git a/lisp/icomplete.el b/lisp/icomplete.el index 3747ae3d281..8a68df876c1 100644 --- a/lisp/icomplete.el +++ b/lisp/icomplete.el @@ -75,7 +75,11 @@ everything preceding the ~/ is discarded so the interactive selection process starts again from the user's $HOME.") (defcustom icomplete-show-matches-on-no-input nil - "When non-nil, show completions when first prompting for input." + "When non-nil, show completions when first prompting for input. +This also means that if you traverse the list of completions with +commands like `C-.' and just hit `C-j' (enter) without typing any +characters, the match under point will be chosen instead of the +default." :type 'boolean :version "24.4") @@ -709,7 +713,10 @@ matches exist." (push comp prospects) (setq limit t)))) (setq prospects (nreverse prospects)) - ;; Decorate first of the prospects. + ;; Return the first match if the user hits enter. + (when icomplete-show-matches-on-no-input + (setq completion-content-when-empty (car prospects))) + ;; Decorate first of the prospects. (when prospects (let ((first (copy-sequence (pop prospects)))) (put-text-property 0 (length first) diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 0d99f4687c0..641a2e53152 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -1119,6 +1119,7 @@ completion candidates than this number." (defvar-local completion-all-sorted-completions nil) (defvar-local completion--all-sorted-completions-location nil) (defvar completion-cycling nil) ;Function that takes down the cycling map. +(defvar completion-content-when-empty nil) (defvar completion-fail-discreetly nil "If non-nil, stay quiet when there is no match.") @@ -1503,8 +1504,13 @@ If `minibuffer-completion-confirm' is `confirm-after-completion', COMPLETION-FUNCTION is called if the current buffer's content does not appear to be a match." (cond - ;; Allow user to specify null string - ((= beg end) (funcall exit-function)) + ;; Allow user to specify null string. In the case that + ;; `completion-content-when-empty' is set, use that instead. + ((= beg end) + (when completion-content-when-empty + (completion--replace beg end completion-content-when-empty)) + (funcall exit-function)) + ((test-completion (buffer-substring beg end) minibuffer-completion-table minibuffer-completion-predicate) |