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

时间:2014-09-11 03:37:02

标签: emacs elisp dot-emacs

如何简化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函数

2 个答案:

答案 0 :(得分:10)

就个人而言,我强烈建议不要将lambda函数添加到钩子中。主要原因是,如果更改内容并重新评估add-hook表达式,则钩子​​包含两者旧的和新的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启用所有缓冲区的自动还原功能,这样您就不必为所有主要模式启用它。

答案 1 :(得分: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或自定义界面删除单个挂钩。