gpt4 book ai didi

emacs - eval-when-compile 不被尊重?

转载 作者:行者123 更新时间:2023-12-02 07:42:01 26 4
gpt4 key购买 nike

我正在尝试为 emacs 24.1.50.1 安装 ace-jump-mode。

我用 M-x package-install 安装它,调用 M-x ace-jump-mode 激活它并提示输入一个字母,但在输入一个字母时,我得到错误:

Symbol's function definition is void: every

运行 emacs -q(然后运行 ​​(add-to-list 'load-path "~/.emacs.d/elpa") 就像我在我的 .emacs 文件)允许我加载 ace-jump-mode 并且它可以正常运行。因此假设错误存在于我的 .emacs 中,我注释掉了我的 .emacs 中的所有内容,并定期重新打开 emacs,但仍然出现错误。

通过一些搜索,我认为问题出在 ace-jump-mode.el 中的代码

(eval-when-compile
(require 'cl))

当我不使用 emacs -q 时无法正常工作。当我 M-x load-library cl 时,一切正常。

我想,由于我在网上找不到任何对此的引用,这不是一个常见的错误,所以它一定是我的配置问题。我知道我可以只在我的 .emacs 中加载 cl,但我认为没有必要只为一个功能加载整个包。

有人知道怎么解决吗?或者,如何从 cl 中只加载一个函数?

谢谢。

最佳答案

Emacs 是 self 记录的,C-h f every 会告诉你这个函数在 cl-extra 而不是 cl 中定义,但是加载 cl 会自动加载它,所以它确实可用。

cl 的一些加载方式可能已经随着 Emacs 24 发生了变化,这打破了这个图书馆,我不确定。就像您发现的那样,最简单的解决方法是只是

(require 'cl)

在你的初始化文件中。这并不像你说的那么大。 很多的你可能使用的库无论如何都会这样做,所以你很可能只是更改加载顺序。

另一种方法是向 ace-jump-mode 的作者提交补丁这避免了使用 every,这更不方便。

最后,如果你让 ace-jump-mode 工作,那是因为你加载了未编译的“.el”文件而不是已编译的“.elc”文件,这将有运行 (require 'cl),这意味着 clcl-seq 都将被加载沿途的某个地方。所以没有魔法可以使这项工作无需加载这些文件。

关于emacs - eval-when-compile 不被尊重?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10105123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com