Function: vertico--group-by
vertico--group-by is a byte-compiled function defined in vertico.el.
Signature
(vertico--group-by FUN ELEMS)
Documentation
Group ELEMS by FUN.
Source Code
;; Defined in ~/.emacs.d/elpa/vertico-20260811.1003/vertico.el
(defun vertico--group-by (fun elems)
"Group ELEMS by FUN."
(let ((ht (make-hash-table :test #'equal)) titles groups)
;; Build hash table of groups
(cl-loop for elem on elems
for title = (funcall fun (car elem) nil) do
(if-let* ((group (gethash title ht)))
(setcdr group (setcdr (cdr group) elem)) ;; Append to tail of group
(puthash title (cons elem elem) ht) ;; New group element (head . tail)
(push title titles)))
(setq titles (nreverse titles))
;; Cycle groups if `vertico--lock-groups' is set
(when-let* ((group (seq-find (lambda (group) (gethash group ht))
vertico--lock-groups)))
(setq titles (vertico--cycle titles (seq-position titles group))))
;; Build group list
(dolist (title titles)
(push (gethash title ht) groups))
;; Unlink last tail
(setcdr (cdar groups) nil)
(setq groups (nreverse groups))
;; Link groups
(let ((link groups))
(while (cdr link)
(setcdr (cdar link) (caadr link))
(pop link)))
(cons (caar groups) titles)))