例如,我在python-mode-hook
中放了一些代码,代码将在以下时间运行:
(1)每次打开python文件*.py
(2)仅第一次触发python-mode
有没有人知道答案是对的?
谢谢!
答案 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")))