2014-09-11 38 views
3

我怎么能简化像我的​​文件中的以下代码?在Emacs中添加几个函数作为钩子

(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函数...

回答

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,使所有缓冲区的自动恢复,这样你就不必启用所有的主要模式。

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或自定义界面。