钩子持有的函数何时在emacs中运行?

时间:2012-10-30 05:50:06

标签: emacs hook elisp

例如,我在python-mode-hook中放了一些代码,代码将在以下时间运行:

(1)每次打开python文件*.py

(2)仅第一次触发python-mode

有没有人知道答案是对的?

谢谢!

3 个答案:

答案 0 :(得分:6)

关于何时运行钩子没有一般规则:这仅由定义钩子的代码控制。但是,遵循的一般惯例是:

  • 如果foo-mode是某种主要模式,则每次在缓冲区中启用foo-mode-hook时都会运行foo-mode

特别是,正如已经指出的那样,python-mode-hook中的函数每次加载.py文件时都会运行。

答案 1 :(得分:4)

如果您想查看代码,请注意绝大多数主要模式都是使用define-derived-mode宏构建的(如果是nil,则模式只能为parent提供find-function新模式实际上实际派生自另一个模式,以便仍然可以从使用宏获得相同的好处和标准行为。

所以 M-x define-derived-mode RET (run-mode-hooks ',hook) RET

您会看到调用模式时发生的最后一件事是,hook(此实例中的-hook将展开为delay-mode-hooks模式的名称后缀)。

因此,每次缓冲区启用该模式(意味着执行该宏定义的模式函数)时,模式的钩子也会运行(以及任何父/祖先模式的钩子 - 有趣的{{1} }和run-mode-hooks交互意味着在完成所有其他处理之前,没有任何钩子运行。)

答案 2 :(得分:3)

每次打开python文件时都会运行。

然后将为此文件缓冲区触发python模式,并执行钩子。

您可以通过编写一个简单的钩子来轻松测试:

(add-hook 'python-mode-hook  (lambda () (message "python mode hook")))