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

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

[elpa] externals/corfu ce5c003243 2/4: Use completion-lazy-hilit


From: ELPA Syncer
Subject: [elpa] externals/corfu ce5c003243 2/4: Use completion-lazy-hilit
Date: Tue, 7 Nov 2023 15:57:38 -0500 (EST)

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

    Use completion-lazy-hilit
---
 corfu.el | 69 +++++++++++++++++++++++++++++++---------------------------------
 1 file changed, 33 insertions(+), 36 deletions(-)

diff --git a/corfu.el b/corfu.el
index d0fc84a6cc..0dc54cc1c6 100644
--- a/corfu.el
+++ b/corfu.el
@@ -522,41 +522,36 @@ FRAME is the existing frame."
 
 (defun corfu--filter-completions (&rest args)
   "Compute all completions for ARGS with deferred highlighting."
-  (cl-letf* ((orig-pcm (symbol-function #'completion-pcm--hilit-commonality))
-             (orig-flex (symbol-function #'completion-flex-all-completions))
-             ((symbol-function #'completion-flex-all-completions)
-              (lambda (&rest args)
-                ;; Unfortunately for flex we have to undo the deferred
-                ;; highlighting, since flex uses the completion-score for
-                ;; sorting, which is applied during highlighting.
-                (cl-letf (((symbol-function 
#'completion-pcm--hilit-commonality) orig-pcm))
-                  (apply orig-flex args))))
-             ;; Defer the following highlighting functions
-             (hl #'identity)
+  (defvar completion-lazy-hilit)
+  (defvar completion-lazy-hilit-fn)
+  (cl-letf* ((completion-lazy-hilit t)
+             (completion-lazy-hilit-fn nil)
              ((symbol-function #'completion-hilit-commonality)
               (lambda (cands prefix &optional base)
-                (setq hl (lambda (x) (car (completion-hilit-commonality (list 
x) prefix base))))
-                (and cands (nconc cands base))))
-             ((symbol-function #'completion-pcm--hilit-commonality)
-              (lambda (pattern cands)
-                (setq hl (lambda (x)
-                           ;; `completion-pcm--hilit-commonality' sometimes
-                           ;; throws an internal error for example when 
entering
-                           ;; "/sudo:://u".
-                           (condition-case nil
-                               (car (completion-pcm--hilit-commonality pattern 
(list x)))
-                             (t x))))
-                cands)))
-    ;; Only advise orderless after it has been loaded to avoid load order 
issues
-    (if (and (fboundp 'orderless-highlight-matches)
-             (fboundp 'orderless-pattern-compiler))
-        (cl-letf (((symbol-function 'orderless-highlight-matches)
-                   (lambda (pattern cands)
-                     (let ((rxs (orderless-pattern-compiler pattern)))
-                       (setq hl (lambda (x) (car (orderless-highlight-matches 
rxs (list x))))))
-                     cands)))
-          (cons (apply #'completion-all-completions args) hl))
-      (cons (apply #'completion-all-completions args) hl))))
+                (setq completion-lazy-hilit-fn
+                      (lambda (x) (car (completion-hilit-commonality (list x) 
prefix base))))
+                (and cands (nconc cands base)))))
+    (if (eval-when-compile (>= emacs-major-version 30))
+        (cons (apply #'completion-all-completions args) 
completion-lazy-hilit-fn)
+      (cl-letf* ((orig-pcm (symbol-function 
#'completion-pcm--hilit-commonality))
+                 (orig-flex (symbol-function 
#'completion-flex-all-completions))
+                 ((symbol-function #'completion-flex-all-completions)
+                  (lambda (&rest args)
+                    ;; Unfortunately for flex we have to undo the deferred 
highlighting, since flex uses
+                    ;; the completion-score for sorting, which is applied 
during highlighting.
+                    (cl-letf (((symbol-function 
#'completion-pcm--hilit-commonality) orig-pcm))
+                      (apply orig-flex args))))
+                 ((symbol-function #'completion-pcm--hilit-commonality)
+                  (lambda (pattern cands)
+                    (setq completion-lazy-hilit-fn
+                          (lambda (x)
+                            ;; `completion-pcm--hilit-commonality' sometimes 
throws an internal error
+                            ;; for example when entering "/sudo:://u".
+                            (condition-case nil
+                                (car (completion-pcm--hilit-commonality 
pattern (list x)))
+                              (t x))))
+                    cands)))
+        (cons (apply #'completion-all-completions args) 
completion-lazy-hilit-fn)))))
 
 (defsubst corfu--length-string< (x y)
   "Sorting predicate which compares X and Y first by length then by `string<'."
@@ -627,7 +622,7 @@ FRAME is the existing frame."
       (corfu--metadata . ,corfu--metadata)
       (corfu--candidates . ,all)
       (corfu--total . ,(length all))
-      (corfu--highlight . ,hl)
+      (corfu--highlight . ,(or hl #'identity))
       (corfu--preselect . ,(if (or (eq corfu-preselect 'prompt) (not all)
                                    (and completing-file (eq corfu-preselect 
'directory)
                                         (= (length corfu--base) (length str))
@@ -730,8 +725,10 @@ FRAME is the existing frame."
   (pcase-let* ((last (min (+ corfu--scroll corfu-count) corfu--total))
                (bar (ceiling (* corfu-count corfu-count) corfu--total))
                (lo (min (- corfu-count bar 1) (floor (* corfu-count 
corfu--scroll) corfu--total)))
-               (`(,mf . ,acands) (corfu--affixate (mapcar corfu--highlight
-                                   (seq-subseq corfu--candidates corfu--scroll 
last))))
+               (`(,mf . ,acands) (corfu--affixate
+                                  (cl-loop for i from 0 below corfu-count
+                                           for c in (nthcdr corfu--scroll 
corfu--candidates)
+                                           collect (funcall corfu--highlight 
(substring c)))))
                (`(,pw ,width ,fcands) (corfu--format-candidates acands))
                ;; Disable the left margin if a margin formatter is active.
                (corfu-left-margin-width (if mf 0 corfu-left-margin-width)))



reply via email to

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