让我们假设我正在使用的特定模式是python-mode
。emacs手册指定以下挂钩:
每个主要模式命令都应该运行一个称为模式钩的普通挂钩,作为初始化的最后一步。
从主要模式约定:
每个主要模式应具有名为
modename-mode-hook
的普通模式钩。主要模式命令应该做的最后一件事是致电run-mode-hooks
。
和 with-eval-after-load
加载代码后执行代码(例如必需),并在已经需要的情况下立即运行。
我在初始文件中有关注:
(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.这很难从文档/手册中找到,欢迎阐明文档/手册中的任何链接)。
现在假设我打开emacs,然后打开一个python文件缓冲区,关于钩子和带有eval-after-load的加载/执行订单是什么?
假设python.el
还没有加载,然后:
- 您访问
foo.py
。 -
set-auto-mode
被调用并确定python-mode
合适,并调用。 -
python-mode
函数是(此时)python-mode
库的自动加载定义 1 ,因此已加载。 - 在加载结束时,评估了
python-mode
库的with-eval-after-load
。 - 真正的
python-mode
函数(通过加载库新定义),在其中: -
python-mode-hook
运行。
每次输入缓冲区/制作当前缓冲区时,是否会运行模式钩?
no,他们每次称为模式函数时运行。
1 默认库是python.el
,它使用(provide 'python)
,但是从您的with-eval-after-load
中,您可以明显地使用python-mode.el
库。