覆盖Emacs库中的单个函数

Laj*_*agy 6 emacs function advising-functions

我使用Emacs模式来注释一些文件(实际模式并不重要)。它作为一个库提供,并附带编译的Lisp代码(当然)。我想通过覆盖其中的单个功能来修改其行为。仅用于我的本地Emacs会话。现在,我只是从库的源文件中复制粘贴该函数,对其进行一些修改,然后单击eval-last-sexp。到目前为止,一切都很好。但是,我得到的结果不一致:我不确定Emacs如何处理来自.elc文件的功能与来自源功能的混合功能。有时,我看到自己的函数版本正在运行,有时是原始版本。非常令人困惑(烦人)。

有什么想法可以不断替换Emacs库中的lisp函数而不修改库的只读源文件吗?

Jac*_*ack 5

这样的事情应该可以解决问题:

(advice-add 'name-of-func-to-override :override
            (lambda () (message "does this instead now")))
Run Code Online (Sandbox Code Playgroud)

name-of-func-to-override函数名称和替换为lambda您的版本。

我建议您查看add-function(和advice-add)文档,因为它们:override可能实际上并不是您想要的。