emacs-diffs
[Top][All Lists]
Advanced

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

emacs-27 9b1053b 5/7: Correctly cache sorted completions in icomplete--s


From: João Távora
Subject: emacs-27 9b1053b 5/7: Correctly cache sorted completions in icomplete--sorted-completions
Date: Tue, 31 Dec 2019 08:32:04 -0500 (EST)

branch: emacs-27
commit 9b1053ba272762f2e2220b806cbd30c61ff6436a
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>

    Correctly cache sorted completions in icomplete--sorted-completions
    
    * lisp/icomplete.el (icomplete--sorted-completions): Use
    completion--cache-all-sorted-completions.
    
    (cherry picked from commit 83587bb68830bd91124f99ddf8590d1d5f63869f)
---
 lisp/icomplete.el | 59 ++++++++++++++++++++++++++++---------------------------
 1 file changed, 30 insertions(+), 29 deletions(-)

diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index ec5591d..5126c03 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -444,35 +444,36 @@ Usually run by inclusion in `minibuffer-setup-hook'."
     (add-hook 'post-command-hook 'icomplete-post-command-hook nil t)))
 
 (defun icomplete--sorted-completions ()
-  (let ((all (completion-all-sorted-completions
-              (icomplete--field-beg) (icomplete--field-end))))
-    (cl-loop
-     for fn in (cond ((and minibuffer-default
-                           (= (icomplete--field-end) (icomplete--field-beg)))
-                      ;; When we have a non-nil default and no input
-                      ;; whatsoever: we want to make sure that default
-                      ;; is bubbled to the top so that
-                      ;; `icomplete-force-complete-and-exit' will
-                      ;; select it (do that even if the match doesn't
-                      ;; match the completion perfectly.
-                      `(,(lambda (comp)
-                           (equal minibuffer-default comp))
-                        ,(lambda (comp)
-                           (string-prefix-p minibuffer-default comp))))
-                     ((and fido-mode
-                           (not minibuffer-default)
-                           (eq (icomplete--category) 'file))
-                      `(,(lambda (comp)
-                           (string= "./" comp)))))
-     thereis (cl-loop
-              for l on all
-              while (consp (cdr l))
-              for comp = (cadr l)
-              when (funcall fn comp)
-              do (setf (cdr l) (cddr l))
-              and return
-              (setq completion-all-sorted-completions (cons comp all)))
-     finally return all)))
+  (cl-loop
+   with beg = (icomplete--field-beg)
+   with end = (icomplete--field-end)
+   with all = (completion-all-sorted-completions beg end)
+   for fn in (cond ((and minibuffer-default
+                         (= (icomplete--field-end) (icomplete--field-beg)))
+                    ;; When we have a non-nil default and no input
+                    ;; whatsoever: we want to make sure that default
+                    ;; is bubbled to the top so that
+                    ;; `icomplete-force-complete-and-exit' will
+                    ;; select it (do that even if the match doesn't
+                    ;; match the completion perfectly.
+                    `(,(lambda (comp)
+                         (equal minibuffer-default comp))
+                      ,(lambda (comp)
+                         (string-prefix-p minibuffer-default comp))))
+                   ((and fido-mode
+                         (not minibuffer-default)
+                         (eq (icomplete--category) 'file))
+                    `(,(lambda (comp)
+                         (string= "./" comp)))))
+   thereis (cl-loop
+            for l on all
+            while (consp (cdr l))
+            for comp = (cadr l)
+            when (funcall fn comp)
+            do (setf (cdr l) (cddr l))
+            and return
+            (completion--cache-all-sorted-completions beg end (cons comp all)))
+   finally return all))
 
 
 



reply via email to

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