如何启用hl-line-mode来执行Dired?

bne*_*eil 1 emacs elisp

我正在尝试仅为Dired模式启用hl-line-mode,但无法正常工作。启用global-hl-mode可以工作,但这是每个缓冲区,而不仅仅是我不想要的缓冲区。

(defun hl-mode-for-dired ()
  (setq hl-line-mode 1)
)

(add-hook 'dired-mode-hook 'hl-mode-for-dired)
Run Code Online (Sandbox Code Playgroud)

如果我尝试执行elisp,则会在emacs日志中收到此错误输出。另一个问题是为什么错误输出会像这样乱码?

hl-mode-for-dired diredp-nb-marked-in-mode-name #[nil "ÁÀ!ÂÃÄ!Ä " 
[font-lock-defaults make-local-variable (... t nil nil beginning-of-line) 
fboundp font-lock-refresh-defaults] 2] #[nil "ÆÇ\"    È=ÉÇÊ#ÆË\"$   
È=*ÉËÌ#)ÍÎÏÐÑ!QAA²AA² AA²ÉÒ Ó\"Ô#ÉÒÓ\"Õ#ÉÒÓ
\"Ö#," [dired-mode-map now bdjc bdj sep map lookup-key "J" 
undefined define-key bmkp-dired-jump "
" ...] 6] #[nil "ÁÀ!Â" [bookmark-make-record-function make-local-variable 
bmkp-make-dired-record] 2] dired-extra-startup)
Run Code Online (Sandbox Code Playgroud)

Dre*_*rew 5

这就是您所需要的:

(add-hook 'dired-after-readin-hook 'hl-line-mode)
Run Code Online (Sandbox Code Playgroud)

hl-line-mode是本地钩子。global-hl-line-mode是一个全局钩子。您只需要Dired缓冲区使用它,这意味着您需要hl-line-mode。


哦,用这个把它关掉:

(remove-hook 'dired-after-readin-hook 'hl-line-mode)
Run Code Online (Sandbox Code Playgroud)