2011-05-28 67 views
5

我在我的emacs配置文件中使用了以下结构:对于我使用的每种编程模式,我都在一个名为programming-mode-config.el的文件中维护配置。 (所以python配置将进入python-mode-config.el等)。如何使用自动加载来正确加载自定义配置?

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

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

因此蟒蛇配置将不会被加载,直到我打开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,而蟒蛇模式是一个插件我使用。有什么方法可以让我的erc配置只在我实际使用erc时加载?我看到的唯一另一种选择是使用eval-after-load,但将我的自定义的每一小部分都加载到eval-after-load中会非常痛苦。

恐怕也可能是我没有正确地自动加载自动加载。任何帮助,将不胜感激。

回答

10

autoload旨在用于从某个文件加载功能,而不是加载附加的功能 - 这就是您看起来像您正在尝试执行的操作。

使用eval-after-load代替:

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

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

autoload的正确使用是加载包含符号的实际文件。因此,通过具有

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

你告诉Emacs的通过加载"erc-mode-config"库,它是不是erc功能定义在哪里可以找到函数erc。另外,文档字符串用于所讨论的功能,因此上述autoload声明使erc的帮助字符串为"Load configuration for ERC" - 这也是不正确的。

我猜你的第一个autoload的例子,因为你的配置文件中有一个(require 'python)声明......但这只是一个猜测。

+0

谢谢,我有一种唠叨的感觉,我的自动加载错误:) – vedang 2011-05-28 16:35:53

+0

另外,你是对的。我以前的配置(需要'python)后跟(需要'python-mode-config)。当我将它重写为自动载入时,我将(require'python)命令移动到python-mode-config文件中。 现在坐着并修理我所有的自动加载和加载后评估。 – vedang 2011-05-28 16:43:53