让我们假设我正在使用的特定模式是python-mode
。 以下对钩Emacs手册规定了:emacs中给定主模式的eval-after-load vs hooks的执行顺序
每一个主要的模式命令是应该运行正常钩称为模式钩作为初始化的最后步骤之一。
来自主要模式约定:
每个主要模式应该有一个名为
modename-mode-hook
正常模式挂钩。主要模式命令应该做的最后一件事是拨打run-mode-hooks
。
和with-eval-after-load
在加载代码(例如,需要)之后执行代码,并且如果已经需要,则立即运行。
我已经按照我的init文件:
(add-hook 'python-mode-hook 'my-post-python)
而且我已经加入
(with-eval-after-load 'python-mode
(setq-default python-basic-offset 7) ; setting some option
(add-to-list 'python-globals-list "console"))
现在假设我开的Emacs,然后打开一个Python文件缓冲区,什么是负载/执行关于挂钩的订单和with-eval-after-load
?从开始指定的文档看来,模式钩子将在with-eval-after-load
代码之前运行?
更具体地说,每次进入缓冲区/进入当前缓冲区时都会运行模式钩子? (P.S.这很难从文档/手册中找到,欢迎任何在文档/手册中澄清上述内容的链接)。
谢谢!我查看了源代码,从中我学到的是模式作者本身不运行钩子(它们只是用钩子定义钩子),但是在那种情况下,谁运行钩子? –
主要模式通常使用'define-derived-mode'定义,它会自动创建钩子变量并通过调用'run-mode-hooks'来定义模式命令。 – jpkotta
如果OTOH您不*使用标准宏来定义模式功能,那么您有责任手动实施所有这些预期的内务管理。 – phils