]> git.eshelyaron.com Git - emacs.git/commitdiff
Another adjustment to flex completion style's sorting function
authorJoão Távora <joaotavora@gmail.com>
Mon, 23 Dec 2019 23:11:59 +0000 (23:11 +0000)
committerJoão Távora <joaotavora@gmail.com>
Tue, 31 Dec 2019 13:31:45 +0000 (13:31 +0000)
* lisp/minibuffer.el (completion--flex-adjust-metadata): Adjust
case when minibuffer-default is non-nil.

(cherry picked from commit 9c912049927cfb18b9c8b37039b38ddf51f2fe81)

lisp/minibuffer.el

index 0e9b1c199a39608f0837c639b849b3be31889df2..f900557296e41bf1b64b4868466f2a3637216a96 100644 (file)
@@ -3608,16 +3608,21 @@ that is non-nil."
                    (> (or s1 0) (or s2 0))))))
              (minibuffer-default
               ;; If we have an empty pattern and a non-nil default, we
-              ;; probably want to make sure that default is bubbled to
-              ;; the top so that a "force-completion" operation will
-              ;; select it.  We want that to happen even if it doesn't
-              ;; match the completion perfectly.
+              ;; want to make sure that default is bubbled to the top
+              ;; so that a "force-completion" operation will select
+              ;; it.  We want that to happen even if it doesn't match
+              ;; the completion perfectly.
               (cl-loop
-               for l on pre-sorted
-               for comp = (cadr l)
-               when (string-prefix-p minibuffer-default comp)
-               do (setf (cdr l) (cddr l))
-               and return (cons comp pre-sorted)
+               ;; JT@2019-12-23: FIXME: ideally, we want to use
+               ;; flex-matching itself on the default itself, not
+               ;; `equal' or `string-prefix-p'.
+               for fn in '(equal string-prefix-p)
+               thereis (cl-loop
+                        for l on pre-sorted
+                        for comp = (cadr l)
+                        when (funcall fn minibuffer-default comp)
+                        do (setf (cdr l) (cddr l))
+                        and return (cons comp pre-sorted))
                finally return pre-sorted))
              (t
               pre-sorted))))))