在 Emacs 中添加几个函数作为钩子

问题描述 投票:0回答:3

如何简化我的

init.el
文件中的以下代码?

(add-hook 'org-mode-hook 'turn-on-auto-revert-mode)
(add-hook 'org-mode-hook 'turn-on-org-cdlatex)
(add-hook 'org-mode-hook 'smartparens-mode)
(add-hook 'org-mode-hook 'abbrev-mode)

我还有其他几行这样的,包括添加到

org-mode-hook
...

的一些 lambda 函数
emacs elisp dot-emacs
3个回答
10
投票

就个人而言,我强烈建议不要向钩子添加

lambda
函数。主要原因是,如果更改内容并重新计算
add-hook
表达式,则挂钩将包含 both 旧的和新的 lambda 表达式。第二个原因是,当您检查钩子时,它看起来很糟糕——与大型 lambda 表达式相比,最好查看函数名称。

相反,我建议使用:

(defun my-org-mode-hook ()
  (turn-on-auto-revert-mode)
  (turn-on-org-cdlatex)
  (smartparens-mode 1)
  (abbrev-mode 1)))
(add-hook 'org-mode-hook 'my-org-mode-hook)

旁注:您可以使用

global-auto-revert-mode
在所有缓冲区上启用自动恢复,这样您就不必为所有主要模式启用它。


3
投票

我用一个简单的

dolist
:

(dolist (fn '(turn-on-auto-revert-mode
              turn-on-org-cdlatex
              smartparens-mode
              abbrev-mode))
  (add-hook 'org-mode-hook fn))

这让您之后仍然可以使用

remove-hook
或从自定义界面删除单个挂钩。


0
投票

这有点是两者的结合,它创建了一个可重用的函数,以压缩后面的语义以供将来的其他钩子使用。

(defun add-hooks (hooked hooks)
  (dolist (fn hooks) (add-hook hooked fn)))

(add-hooks 'prog-mode-hook '(display-line-numbers-mode
                             display-fill-column-indicator-mode
                             hl-line-mode
                             my-fill-column-mode-hook-80))
© www.soinside.com 2019 - 2024. All rights reserved.