emacs 中给定主要模式的 eval-after-load 与挂钩的执行顺序
Execution order of eval-after-load vs hooks for a given major mode in emacs
让我们假设我正在使用的特定模式是 python-mode
。
Emacs 手册为挂钩指定了以下内容:
Every major mode command is supposed to run a normal hook called the mode hook as one of the last steps of initialization.
来自主要模式约定:
Each major mode should have a normal mode hook named modename-mode-hook
. The very last thing the major mode command should do is to call 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
的 loading/execution 命令是什么?从开始时指定的文档来看,模式挂钩似乎会 运行 before with-eval-after-load
code?
更具体地说,模式挂钩是 运行 每次输入缓冲区/使缓冲区成为当前缓冲区吗? (P.S。这很难从 docs/manual 中找到,欢迎在 docs/manual 中澄清上述任何内容的任何链接。
Now assuming I open emacs, followed by opening a python file buffer, what are the loading/execution order with respect to hooks and with-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
运行s.
Are mode hooks are run every time a buffer is entered/ made the current buffer?
不,他们 运行 每次调用模式函数时。
1 默认库是 python.el
,它使用 (provide 'python)
,但从你的 with-eval-after-load
来看,你显然使用 python-mode.el
图书馆。
让我们假设我正在使用的特定模式是 python-mode
。
Emacs 手册为挂钩指定了以下内容:
Every major mode command is supposed to run a normal hook called the mode hook as one of the last steps of initialization.
来自主要模式约定:
Each major mode should have a normal mode hook named
modename-mode-hook
. The very last thing the major mode command should do is to callrun-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
的 loading/execution 命令是什么?从开始时指定的文档来看,模式挂钩似乎会 运行 before with-eval-after-load
code?
更具体地说,模式挂钩是 运行 每次输入缓冲区/使缓冲区成为当前缓冲区吗? (P.S。这很难从 docs/manual 中找到,欢迎在 docs/manual 中澄清上述任何内容的任何链接。
Now assuming I open emacs, followed by opening a python file buffer, what are the loading/execution order with respect to hooks and with-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
运行s.
Are mode hooks are run every time a buffer is entered/ made the current buffer?
不,他们 运行 每次调用模式函数时。
1 默认库是 python.el
,它使用 (provide 'python)
,但从你的 with-eval-after-load
来看,你显然使用 python-mode.el
图书馆。