branch: externals/orderless
commit e0b2b74d71d96c2da74a79bfef6aec197887ce86
Merge: 2e46849f5e c06e66d964
Author: Omar AntolĂ­n Camarena <[email protected]>
Commit: GitHub <[email protected]>

    Merge pull request #120 from minad/fix-118
    
    Improve orderless-try-completion (Fix #118)
---
 orderless.el | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/orderless.el b/orderless.el
index d1b47e9749..0d99e35ed7 100644
--- a/orderless.el
+++ b/orderless.el
@@ -423,18 +423,20 @@ This function is part of the `orderless' completion 
style."
   (catch 'orderless--many
     (let (one)
       ;; Abuse all-completions/orderless-filter as a fast search loop.
-      ;; Should be more or less allocation-free since our "predicate"
-      ;; always returns nil.
-      (orderless-filter string table
-                        ;; key/value for hash tables
-                        (lambda (&rest args)
-                          (when (or (not pred) (apply pred args))
-                            (when one
-                              (throw 'orderless--many (cons string point)))
-                            (setq one (car args) ;; first argument is key
-                                  one (if (consp one) (car one) one) ;; alist
-                                  one (if (symbolp one) (symbol-name one) 
one)))
-                          nil))
+      ;; Should be almost allocation-free since our "predicate" is not
+      ;; called more than two times.
+      (orderless-filter
+       string table
+       ;; key/value for hash tables
+       (lambda (&rest args)
+         (when (or (not pred) (apply pred args))
+           (setq args (car args) ;; first argument is key
+                 args (if (consp args) (car args) args) ;; alist
+                 args (if (symbolp args) (symbol-name args) args))
+           (when (and one (not (equal one args)))
+             (throw 'orderless--many (cons string point)))
+           (setq one args)
+           t)))
       (when one
         (if (equal string one)
             t ;; unique exact match

Reply via email to