emacs-diffs
[Top][All Lists]
Advanced

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

master 1b8d369: Change icomplete-show-matches-on-no-input behavior


From: Lars Ingebrigtsen
Subject: master 1b8d369: Change icomplete-show-matches-on-no-input behavior
Date: Fri, 14 Aug 2020 07:30:05 -0400 (EDT)

branch: master
commit 1b8d369c381b5a63e40529d0d95dfa75d94b8e09
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    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>.
---
 etc/NEWS           |  6 ++++++
 lisp/icomplete.el  | 11 +++++++++--
 lisp/minibuffer.el | 10 ++++++++--
 3 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 5dcaefe..91add02 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -786,6 +786,12 @@ digits.
 ** Miscellaneous
 
 ---
+*** 'icomplete-show-matches-on-no-input' behavior change
+Previously, choosing a different completion with commands like 'C-.'
+and then hitting enter would choose the default completion.  Doung
+this will now choose the completion under point.
+
+---
 *** New user option 'term-scroll-snap-to-bottom'.
 By default, 'term' and 'ansi-term' will now recenter the buffer so
 that the prompt is on the final line in the window.  Setting this new
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index 3747ae3..8a68df8 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 0d99f46..641a2e5 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)



reply via email to

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