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

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

[elpa] externals/vertico c35c9a1 2/2: Simplify sorting function macro


From: ELPA Syncer
Subject: [elpa] externals/vertico c35c9a1 2/2: Simplify sorting function macro
Date: Sun, 11 Jul 2021 14:57:17 -0400 (EDT)

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

    Simplify sorting function macro
---
 vertico.el | 62 +++++++++++++++++++++++++++++---------------------------------
 1 file changed, 29 insertions(+), 33 deletions(-)

diff --git a/vertico.el b/vertico.el
index ab680d5..12e2226 100644
--- a/vertico.el
+++ b/vertico.el
@@ -195,45 +195,41 @@ See `resize-mini-windows' for documentation."
       (and (= (length x) (length y))
            (string< x y))))
 
-(defmacro vertico--define-sort (fun recency bsize bindex bpred pred)
-  "Generate optimized sort FUN.
-The function is configured by RECENCY, BSIZE, BINDEX, BPRED and PRED."
-  `(defun ,fun (candidates)
+(defmacro vertico--define-sort (by bsize bindex bpred pred)
+  "Generate optimized sorting function.
+The function is configured by BY, BSIZE, BINDEX, BPRED and PRED."
+  `(defun ,(intern (mapconcat #'symbol-name `(vertico sort ,@by) "-")) 
(candidates)
+     ,(concat "Sort candidates by " (mapconcat #'symbol-name by ", ") ".")
      (let* ((buckets (make-vector ,bsize nil))
-            (recent-candidates))
-       ,@(if recency
-             `((dolist (cand candidates)
-                 (if-let (idx (gethash cand vertico--history-hash))
-                     (push (cons idx cand) recent-candidates)
+            (recent-cands))
+       ,@(if (eq (car by) 'recency)
+             `((dolist (% candidates)
+                 ;; Find recent-cands or fill buckets
+                 (if-let (idx (gethash % vertico--history-hash))
+                     (push (cons idx %) recent-cands)
                    (let ((idx (min ,(1- bsize) ,bindex)))
-                     (aset buckets idx (cons cand (aref buckets idx))))))
+                     (aset buckets idx (cons % (aref buckets idx))))))
                ;; Sort recent candidates
-               (setq recent-candidates (sort recent-candidates 
#'car-less-than-car))
-               (let ((cand recent-candidates))
+               (setq recent-cands (sort recent-cands #'car-less-than-car))
+               (let ((cand recent-cands))
                  (while cand
                    (setcar cand (cdar cand))
                    (pop cand))))
-          `((dolist (cand candidates)
-              (let ((idx (min ,(1- bsize) ,bindex)))
-                (aset buckets idx (cons cand (aref buckets idx)))))))
-       (nconc
-        ;; Sorted recent candidates
-        recent-candidates
-        ;; Sort bucket candidates
-        (mapcan
-         (lambda (bucket) (sort bucket #',bpred))
-         (nbutlast (append buckets nil)))
-        ;; Last bucket needs special treatment
-        (sort (aref buckets ,(1- bsize)) #',pred)))))
-
-(vertico--define-sort vertico-sort-recency-length-alpha
-  'recency 32 (length cand) string< vertico--length-string<)
-(vertico--define-sort vertico-sort-recency-alpha
-  'recency 32 (if (eq cand "") 0 (/ (aref cand 0) 4)) string< string<)
-(vertico--define-sort vertico-sort-length-alpha
-  nil 32 (length cand) string< vertico--length-string<)
-(vertico--define-sort vertico-sort-alpha
-  nil 32 (if (eq cand "") 0 (/ (aref cand 0) 4)) string< string<)
+           `((dolist (% candidates)
+               ;; Fill buckets
+               (let ((idx (min ,(1- bsize) ,bindex)))
+                 (aset buckets idx (cons % (aref buckets idx)))))))
+       (nconc recent-cands
+              ;; Sort bucket candidates
+              (mapcan (lambda (bucket) (sort bucket #',bpred))
+                      (nbutlast (append buckets nil)))
+              ;; Last bucket needs special treatment
+              (sort (aref buckets ,(1- bsize)) #',pred)))))
+
+(vertico--define-sort (recency length alpha) 32 (length %) string< 
vertico--length-string<)
+(vertico--define-sort (recency alpha) 32 (if (eq % "") 0 (/ (aref % 0) 4)) 
string< string<)
+(vertico--define-sort (length alpha) 32 (length %) string< 
vertico--length-string<)
+(vertico--define-sort (alpha) 32 (if (eq % "") 0 (/ (aref % 0) 4)) string< 
string<)
 
 (defun vertico--affixate (metadata candidates)
   "Annotate CANDIDATES with annotation function specified by METADATA."



reply via email to

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