Emacs:如何为Dired中的Junction添加字体着色样式
在Emacs 26(Windows)中为Dired的Junction文件名添加字体着色
针对你遇到的Junction文件名无法着色的问题,可以从以下几个方面排查和修正:
1. 验证正则表达式的匹配准确性
你的dired-re-jun正则可能没有正确匹配Dired中Junction的行格式。Windows下Dired的行结构和类Unix系统不同,建议先验证正则是否有效:
- 打开包含Junction的Dired buffer
- 执行
M-: (re-search-forward dired-re-jun),如果无匹配,说明正则需要调整 - 尝试修改正则定义,比如去掉多余的
[^:],或者根据实际行结构调整:
如果你的Dired行中(defvar dired-re-jun (concat dired-re-maybe-mark dired-re-inode-size "J"))J后直接跟空格,也可以改为:(defvar dired-re-jun (concat dired-re-maybe-mark dired-re-inode-size "J\\s-"))
2. 正确添加字体锁规则
直接使用push会将规则加到dired-font-lock-keywords列表头部,可能被前面的规则优先匹配导致失效。建议改用add-to-list并将规则放到列表末尾:
(defface dired-junction '((t (:inherit font-lock-keyword-face))) "Face used for junctions." :group 'dired-faces :version "22.1") (defvar dired-junction-face 'dired-junction "Face name used for junctions.") (defvar dired-re-jun (concat dired-re-maybe-mark dired-re-inode-size "J")) ;; 添加Junction字体锁规则到列表末尾 (add-to-list 'dired-font-lock-keywords (list dired-re-jun '(".+" (dired-move-to-filename) nil (0 dired-junction-face))) t)
3. 确保规则在Dired buffer中生效
dired-font-lock-keywords是buffer-local变量,全局修改可能不会影响已打开的Dired窗口。建议将规则添加到dired-mode-hook中,确保每次打开Dired都加载:
(add-hook 'dired-mode-hook (lambda () (add-to-list 'dired-font-lock-keywords (list dired-re-jun '(".+" (dired-move-to-filename) nil (0 dired-junction-face))) t)))
4. 刷新字体锁
修改规则后,在已打开的Dired buffer中执行M-x font-lock-fontify-buffer,或者重启Dired模式(M-x dired-mode),即可看到着色效果。
另外,可以通过M-x list-faces-display检查dired-junction face是否正确加载,确认其样式是否符合预期。
内容的提问来源于stack exchange,提问作者pbpb
相关产品推荐
相关产品推荐

