]> git.eshelyaron.com Git - dotfiles.git/commitdiff
Update 'completion-preview'
authorEshel Yaron <me@eshelyaron.com>
Thu, 26 Oct 2023 18:05:12 +0000 (20:05 +0200)
committerEshel Yaron <me@eshelyaron.com>
Thu, 26 Oct 2023 18:05:12 +0000 (20:05 +0200)
.emacs.d/lisp/completion-preview.el

index c38b9c4c37b44cc8e390041d106162776d567c9b..46b45fa3443f5f62576d9c477b3df6e00ffa6605 100644 (file)
   "In-buffer completion preview."
   :group 'completion)
 
+(defcustom completion-preview-exact-match-only nil
+  "Whether to show completion preview only when there is an exact match.
+
+If this option is non-nil, Completion Preview mode only shows the
+preview overlay when there is exactly one completion candidate
+that matches the symbol at point, otherwise it shows the top
+candidate also when there are multiple matching candidates."
+  :type 'boolean)
+
 (defcustom completion-preview-commands '(self-insert-command)
   "List of commands that should trigger completion preview."
   :type '(repeat (function :tag "Command" :value self-insert-command)))
@@ -95,9 +104,11 @@ all of the functions return non-nil."
          (when last
            (setcdr last nil)
            (let* ((sorted (funcall sort-fn all))
+                  (multi (cadr sorted)) ; multiple candidates
                   (cand (car sorted)))
-             (when (string-prefix-p string cand)
-               (let* ((face (if (cadr sorted) 'completion-preview 'completion-preview-exact))
+             (when (and (not (and multi completion-preview-exact-match-only))
+                        (string-prefix-p string cand))
+               (let* ((face (if multi 'completion-preview 'completion-preview-exact))
                       (after (propertize (substring cand (length string)) 'face face)))
                  (unless (string-empty-p after)
                    (add-text-properties 0 1 '(cursor 1) after))