你可以自己写 annotator
(defun marginalia-annotate-command (cand)
"Annotate command CAND with its documentation string.
Similar to `marginalia-annotate-symbol', but does not show symbol class."
(when-let* ((sym (intern-soft cand))
(mode (if (boundp sym)
sym
(lookup-minor-mode-from-indicator cand))))
(concat
(if (and (boundp mode) (symbol-value mode))
(propertize " On" 'face 'marginalia-on)
(propertize " Off" 'face 'marginalia-off))
(marginalia-annotate-binding cand)
(marginalia--documentation (marginalia--function-doc sym)))))
最好是直接用 consult-minor-mode-menu
6 个赞
vertico+marginalia还没有特别完善,有些功能并不支持。
哈哈 我试试看自己添加annotator ,谢谢 @alexluigit,也谢谢 @seagle0128
这个效果很好啊 ~ 谢谢
现在查看查看mode 的 on 和 off, 很方便了 ~
这只是个示例,突出效果所以我去掉了非 minor-mode 候选的文档,如果真的要用的话可以自己再改改。
之前有看到过这个issue,marginalia还不支持直接改颜色
没看marginila 代码,原理是都是字符串处理。all-the-icons-ivy-rich
是支持的,一直用着。
jixiuf
50
这两天reddit 上看到这个贴子,
consult-buffer
在展示recentf
文件列表时,只展示文件名,(不展示全路径),觉得不错,略加修改后分享如下。
(defun vmacs-consult--source-recentf-items ()
(let ((ht (consult--buffer-file-hash))
file-name-handler-alist ;; No Tramp slowdown please.
items)
(dolist (file recentf-list (nreverse items))
;; Emacs 29 abbreviates file paths by default, see
;; `recentf-filename-handlers'.
(unless (eq (aref file 0) ?/)
(setq file (expand-file-name file)))
(unless (gethash file ht)
(push (propertize
(vmacs-short-filename file)
'multi-category `(file . ,file))
items)))))
(defun vmacs-short-filename(file)
"return filename with one parent directory.
/a/b/c/d-> c/d"
(let* ((file (directory-file-name file))
(filename (file-name-nondirectory file))
;; (dir (file-name-directory file))
short-name)
(setq short-name filename
;; (if dir
;; (format "%s/%s" (file-name-nondirectory
;; (directory-file-name dir))
;; filename)
;; filename)
)
(propertize short-name 'multi-category `(file . ,file))))
(plist-put consult--source-recent-file
:items #'vmacs-consult--source-recentf-items)
如果使用了 consult-dir
,以下代码可实现只展示文件名
(with-eval-after-load 'consult-dir
(defvar consult-dir--source-project-items (plist-get consult-dir--source-project :items))
(plist-put consult-dir--source-project
:items #'(lambda() (mapcar #'vmacs-short-filename (funcall consult-dir--source-project-items))))
(plist-put consult-dir--source-recentf
:items #'(lambda() (mapcar #'vmacs-short-filename (consult-dir--recentf-dirs))))
(plist-put consult-dir--source-default
:items #'(lambda() (mapcar #'vmacs-short-filename (consult-dir--default-dirs))))
)
但只展示文件名的话,也有缺点,比如文件有重名时,无法知道是哪个目录的文件,
于是想到利用 marginalia 以 annotation的形式 展示全路径。需要advice marginalia–annotate-local-file来实现(默认 的annotate 有 文件权限、文件大小、访问时间等信息,感觉没什么用处 还占地方)
(advice-add 'marginalia--annotate-local-file :override
(defun marginalia--annotate-local-file-advice (cand)
(marginalia--fields
((marginalia--full-candidate cand)
:face 'marginalia-size )))))
效果如下:
4 个赞