emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/cape a54a512030 030/146: cape-merge-capfs: Compute cand


From: ELPA Syncer
Subject: [elpa] externals/cape a54a512030 030/146: cape-merge-capfs: Compute candidates later
Date: Sun, 9 Jan 2022 20:57:40 -0500 (EST)

branch: externals/cape
commit a54a51203073e99ada433d6dc8c3c83cdfb104ec
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    cape-merge-capfs: Compute candidates later
---
 cape.el | 31 ++++++++++++++++++-------------
 1 file changed, 18 insertions(+), 13 deletions(-)

diff --git a/cape.el b/cape.el
index 8aa608dbab..4c6dec0980 100644
--- a/cape.el
+++ b/cape.el
@@ -500,26 +500,21 @@
   (lambda ()
     (when-let (results (delq nil (mapcar #'funcall capfs)))
       (pcase-let ((`((,beg ,end . ,_)) results)
-                  (candidates nil)
-                  (prefix-len nil)
-                  (ht (make-hash-table :test #'equal)))
-        (cl-loop for (beg2 end2 table . plist) in results do
+                  (candidates 'init)
+                  (ht (make-hash-table :test #'equal))
+                  (tables nil)
+                  (prefix-len nil))
+        (cl-loop for (beg2 end2 . rest) in results do
                  (when (and (= beg beg2) (= end end2))
-                   (let* ((pred (plist-get plist :predicate))
-                          (metadata (completion-metadata "" table pred))
-                          (sort (or (completion-metadata-get metadata 
'display-sort-function)
-                                    #'identity))
-                          (cands (funcall sort (all-completions "" table 
pred)))
-                          (plen (plist-get plist :company-prefix-length)))
+                   (push rest tables)
+                   (let ((plen (plist-get (cdr rest) :company-prefix-length)))
                      (cond
                       ((eq plen t)
                        (setq prefix-len t))
                       ((and (not prefix-len) (integerp plen))
                        (setq prefix-len plen))
                       ((and (integerp prefix-len) (integerp plen))
-                       (setq prefix-len (max prefix-len plen))))
-                     (setq candidates (nconc candidates cands))
-                     (cl-loop for cand in cands do (puthash cand plist ht)))))
+                       (setq prefix-len (max prefix-len plen)))))))
         (list beg end
               (lambda (str pred action)
                 (if (eq action 'metadata)
@@ -527,6 +522,16 @@
                       (category . cape-merged)
                       (display-sort-function . identity)
                       (cycle-sort-function . identity))
+                  (when (eq candidates 'init)
+                    (setq candidates
+                          (cl-loop for (table . plist) in (nreverse tables) 
nconc
+                                   (let* ((pred (plist-get plist :predicate))
+                                          (metadata (completion-metadata "" 
table pred))
+                                          (sort (or (completion-metadata-get 
metadata 'display-sort-function)
+                                                    #'identity))
+                                          (cands (funcall sort 
(all-completions "" table pred))))
+                                     (cl-loop for cand in cands do (puthash 
cand plist ht))
+                                     cands))))
                   (complete-with-action action candidates str pred)))
               :exclusive 'no
               :company-prefix-length prefix-len



reply via email to

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