emacs中给定主要模式的评估加载和挂钩的执行顺序



让我们假设我正在使用的特定模式是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库。

相关内容

  • 没有找到相关文章

最新更新