先说动机, bookmark-jump(consult-bookmark) 我希望也能搜索 bookmark 所在的文件, 但 path 是 annotation 的一部分, 无法被检索, 我想问有没有办法让 annotation 也被检索?
我也不确定 annotation 默认到底能不能被搜索, consult-yasnippet 我发现是能搜索到 annotation 的
不是 consult-yasnippet 能搜索 annotation,是 consult-yasnippet 用了障眼法。
- 运行一个最小配置的 Emacs
$ emacsq.sh -P use-package,yasnippet,vertico,consult,consult-yasnippet --eval "\
(progn
(use-package vertico
:init
(vertico-mode))
(use-package consult)
(use-package yasnippet
:config
(yas-reload-all)
(yas-global-mode))
(use-package consult-yasnippet
:after (consult yasnippet)
:bind ((\"M-,\" . consult-yasnippet))))"
- 验证"搜索" annotation
(Fig.1 输入 f
,显示匹配到所有 f 开头的 annotation)
(Fig.2 输入空格 + x
, 显示匹配到所有 x 开头的 candidate)
好像真的是可以搜索 annotation,实则是 consult-yasnippet 耍了一点小聪明,把 annotation 直接拼接到 candidate 前面:
new-candidate <- (concate invisible-annotation raw-candidate)
以下代码实现相同的效果:
(let ((dict '(("foo" . "1") ("bar" . "2"))))
(consult--read
(mapcar (pcase-lambda (`(,cand . ,val))
(concat (propertize (concat val " ") 'invisible t)
cand))
dict)
:annotate (lambda (cand) (concat " " (cdr (assoc (substring cand 2) dict))))
))
2 个赞