为次要模式检查/修改Emacs挂钩

时间:2014-07-08 15:20:26

标签: emacs

我使用以下内容为Python缓冲区启用linum-mode

(defun my-python-mode-hook () 
  (linum-mode 1)) 
(add-hook 'python-mode-hook 'my-python-mode-hook)

然而,我对钩子的理解仍然非常有限。据我所知,上面的代码将函数添加到python-mode-hook,所以我假设这个钩子已经定义了已经,甚至可能在其中有一些代码已经。有了这个:

  1. Emacs是否为所有次要模式定义了<minor_mode_name>-hook形式的钩子?或者themshelves定义它们的模式?
  2. 如何查找已添加到挂钩的代码?
  3. 如何更改该挂钩的元素?

  4. 这个问题的部分动机来自于issue的GitHub elpy,其中elpy-mode似乎留下了python-mode的一个钩子,在卸载后不会消失elpy。

1 个答案:

答案 0 :(得分:4)

(1)Emacs没有自动定义次模式挂钩,但您可以使用:after-hook关键字定义一个(根据defining minor mode的手册页)。 ( UPDATE :根据Legoscia的最后评论,从emacs版本24.3.90开始自动定义次模式挂钩。谢谢,Legoscia!)

(2)钩子只是变量,所以你可以像检查任何其他变量一样检查它们(例如C-h vM-x describe-variable RET some-hook)。

(3)您可以使用add-hookremove-hook更改挂钩的元素(请参阅setting hooks上的手册),例如:

(add-hook 'python-mode-hook 'my-python-mode-hook)

(remove-hook 'python-mode-hook 'my-python-mode-hook)

(顺便说一下,最好在钩子而不是匿名lambda中使用命名函数,因为你可以在命名函数上使用remove-hook。)