在emacs中,如果尚未定义函数,如何向钩子添加函数?

时间:2012-07-25 09:00:37

标签: emacs elisp elpa

我已经从ELPA安装了一些东西,即邪恶和彩虹分隔符。

为了让它们在加载emacs时运行,我会提出类似的内容:

(evil-mode)
(global-rainbow-delimiters-mode)

在我的init.el文件中。

但是,因为我是从ELPA安装它们的,所以在我的init.el加载之后才会加载它们,因此两个符号都是未定义的。

据我了解,这也阻止我做像

这样的事情
(add-hook 'after-init-hook 'global-rainbow-delimiters-mode)

我该如何解决这个问题?

后记:这个问题实际上是由于我在init.el的开头没有调用(package-initialize)造成的,这会加载所有使用软件包安装的东西(evilmode和rainbow-delimiters只是其中的两个) )在正确的时间

3 个答案:

答案 0 :(得分:3)

您的add-hook解决方案可行。

在那里,'global-rainbow-delimiters-mode只是一个名称,当调用add-hook时,它将在稍后解析为该函数,并且该函数将在那时存在。

ELPA documentation确实提到了这种方法,尽管它似乎认为这是最后的手段。

答案 1 :(得分:1)

AFAIU编译init文件不是一个好主意 - 但到目前为止还不相关。

你的钩子失败了,因为它在读取init后运行,但是在东西被加载之前。您需要在ELPA加载后运行函数。

尝试eval-after-load

答案 2 :(得分:1)

您还可以使用(package-initialize)尽早初始化软件包。这将允许您不将所有代码放在一个钩子中。