如何使用自动加载功能正确加载自定义配置?

时间:2011-05-28 14:06:26

标签: emacs autoload

我在emacs配置中使用以下结构:对于我使用的每种编程模式,我在一个名为programming-mode-config.el的文件中维护配置。 (所以python配置将进入python-mode-config.el等)。

之前,我曾经在init.el中要求每个文件。这种方法的缺点是我的启动时间很长。所以这周末,我坐下来将所有需求转换为自动加载。现在我的init文件看起来像这样:

(autoload 'python-mode "python-mode-config" "Load python config" t)

因此在我打开python文件之前不会加载python配置。这有助于将我的启动时间缩短到大约1秒,但在所有情况下都无法正常工作。例如,

(autoload 'erc "erc-mode-config" "Load configuration for ERC" t)

根本没有加载我的erc调整。查看自动加载文档,它指出:

Define FUNCTION to autoload from FILE.
...
If FUNCTION is already defined other than as an autoload,
this does nothing and returns nil.

所以我猜测erc配置没有被加载,因为ERC带有emacs'内置',而python-mode是我使用的插件。有没有什么办法可以让我的erc配置只在我实际使用erc时加载?我看到的唯一另一种选择是使用eval-after-load,但是将我的自定义的每一小部分都放入eval-after-load中会非常痛苦。

我担心也可能是因为我没有正确地使用自动加载装置。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:10)

autoload旨在用于从某个文件加载函数,而不是加载其他功能 - 这就是您尝试做的事情。

改为使用eval-after-load

(eval-after-load "erc" '(load "erc-mode-config"))

告诉Emacs在加载erc-mode-config文件后加载"erc"库 - 这就是你想要的。如果您的内部有'(require 'erc-mode-config)语句,也可以使用provide

正确使用autoload是加载包含该符号的实际文件。所以,通过

(autoload 'erc "erc-mode-config" "Load configuration for ERC" t)

您告诉Emacs通过加载erc库找到函数"erc-mode-config",而erc库不是定义autoload函数的位置。此外,docstring适用于相关函数,因此上面的erc语句会使"Load configuration for ERC"的帮助字符串为autoload - 这也是错误的。

我猜你的第一个(require 'python)示例有效,因为你的配置文件中有一个{{1}}语句......但这只是猜测。