我使用 Emacs 模式来注释我的一些文件(实际模式并不重要)。它以库的形式提供,并带有编译好的 lisp 代码(当然)。我想通过覆盖其中的单个函数来修改其行为。仅用于我本地的 Emacs session 。现在,我只是从库的源文件中复制粘贴该函数,稍微修改一下,然后点击 eval-last-sexp
.到现在为止还挺好。但是,我得到了不一致的结果:我不确定 Emacs 如何处理来自 .elc
的函数。文件与来自源的函数混合。有时我会看到自己运行的函数版本,有时是原始版本。非常困惑(和烦人)。
任何想法如何在不修改库的只读源文件的情况下一致地替换 Emacs 库中的 lisp 函数?
最佳答案
像这样的事情应该可以解决问题:
(advice-add 'name-of-func-to-override :override
(lambda () (message "does this instead now")))
替换
name-of-func-to-override
带有函数名和 lambda
用你的版本。我建议看
add-function
(和 advice-add
)文档为 :override
实际上可能不是您想要的。
关于function - 覆盖 Emacs 库中的单个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38511253/