branch: externals/vertico
commit 000a415630c4be0fb6be5c5a8fc31b6caaa7a76e
Author: Daniel Mendler <[email protected]>
Commit: Daniel Mendler <[email protected]>
Improve lazy highlighting for quoted candidates (bug#77754)
---
extensions/vertico-flat.el | 2 +-
extensions/vertico-grid.el | 2 +-
vertico.el | 19 +++++++++++++------
3 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/extensions/vertico-flat.el b/extensions/vertico-flat.el
index a3c95a19ec..8242525644 100644
--- a/extensions/vertico-flat.el
+++ b/extensions/vertico-flat.el
@@ -114,7 +114,7 @@
(while (and candidates (not (eq wrapped (car candidates)))
(> width 0) (> count 0))
(let ((cand (pop candidates)) (prefix "") (suffix ""))
- (setq cand (funcall vertico--hilit (substring cand)))
+ (setq cand (vertico--hilit cand))
(pcase (and vertico-flat-annotate (vertico--affixate (list cand)))
(`((,c ,p ,s)) (setq cand c prefix p suffix s)))
(when (string-search "\n" cand)
diff --git a/extensions/vertico-grid.el b/extensions/vertico-grid.el
index b8e532c54a..9403a7261a 100644
--- a/extensions/vertico-grid.el
+++ b/extensions/vertico-grid.el
@@ -131,7 +131,7 @@ When scrolling beyond this limit, candidates may be
truncated."
(width (- (/ (vertico--window-width) vertico-grid--columns) sep))
(cands (funcall (if (> vertico-grid-annotate 0) #'vertico--affixate
#'identity)
(cl-loop repeat count for c in (nthcdr start
vertico--candidates)
- collect (funcall vertico--hilit (substring
c)))))
+ collect (vertico--hilit c))))
(cands (cl-loop
for cand in cands for index from 0 collect
(let (prefix suffix)
diff --git a/vertico.el b/vertico.el
index 8655774479..a69baba4bd 100644
--- a/vertico.el
+++ b/vertico.el
@@ -306,6 +306,12 @@ The value should lie between 0 and vertico-count/2."
(test-completion content table
pred)))
-1 0))))))
+(defun vertico--hilit (cand)
+ "Highlight CAND string with lazy highlighting."
+ ;; bug#77754: Highlight unquoted string.
+ (funcall vertico--hilit (substring (or (get-text-property
+ 0 'completion--unquoted cand)
cand))))
+
(defun vertico--cycle (list n)
"Rotate LIST to position N."
(nconc (copy-sequence (nthcdr n list)) (seq-take list n)))
@@ -419,11 +425,12 @@ The value should lie between 0 and vertico-count/2."
(defun vertico--format-group-title (title cand)
"Format group TITLE given the current CAND."
+ ;; Copy candidate highlighting if title is a prefix of the candidate.
(when (string-prefix-p title cand)
- ;; Highlight title if title is a prefix of the candidate
- (setq cand (propertize cand 'face 'vertico-group-title)
- title (substring (funcall vertico--hilit cand) 0 (length title)))
+ (setq title (substring cand 0 (length title)))
(vertico--remove-face 0 (length title) 'completions-first-difference
title))
+ (setq title (substring title))
+ (add-face-text-property 0 (length title) 'vertico-group-title t title)
(format (concat vertico-group-format "\n") title))
(defun vertico--format-count ()
@@ -474,7 +481,7 @@ The value should lie between 0 and vertico-count/2."
(defun vertico--candidate (&optional hl)
"Return current candidate string with optional highlighting if HL is
non-nil."
- (let ((content (substring (or (car-safe vertico--input)
(minibuffer-contents-no-properties)))))
+ (let ((content (or (car-safe vertico--input)
(minibuffer-contents-no-properties))))
(cond
((>= vertico--index 0)
(let ((cand (substring (nth vertico--index vertico--candidates))))
@@ -482,7 +489,7 @@ The value should lie between 0 and vertico-count/2."
;; `completion--twq-all' hack. This should better be fixed in Emacs
;; itself, the corresponding code is already marked as fixme.
(vertico--remove-face 0 (length cand) 'completions-common-part cand)
- (concat vertico--base (if hl (funcall vertico--hilit cand) cand))))
+ (concat vertico--base (if hl (vertico--hilit cand) cand))))
((and (equal content "") (or (car-safe minibuffer-default)
minibuffer-default)))
(t content))))
@@ -513,7 +520,7 @@ The value should lie between 0 and vertico-count/2."
(candidates
(vertico--affixate
(cl-loop repeat vertico-count for c in (nthcdr index
vertico--candidates)
- collect (funcall vertico--hilit (substring c))))))
+ collect (vertico--hilit c)))))
(pcase-dolist ((and cand `(,str . ,_)) candidates)
(when-let ((new-title (and group-fun (funcall group-fun str nil))))
(unless (equal title new-title)