如何重命名elisp宏?为了更准确,我希望使defun成为cl-defun的同义词。
我不在乎时间或内存开销。

最佳答案

摘要

我认为您无法做到-至少不容易做到。

由于cl-defun扩展为defun,因此如果使用明显的defun,则在使用(defalias 'defun 'cl-defun)时将获得一个无限的宏扩展循环。

这是一种方法

所以您需要做的是


保存原始的defun(fset 'defun-original (symbol-function 'defun))
复制cl-defuncl-macs.el的定义,将defun替换为defun-original
使用defuncl-defundefalias替换为(defalias 'defun 'cl-defun)


现在,至少,如果情况变糟,您可以使用(fset 'defun (symbol-function 'defun-original))恢复原始行为。

...但是你不想要

但是,我认为您并不是真的想要这样做。

如果要使用Common Lisp,请use it。试图假装可以将Elisp变成CL,只会让您感到悲伤。 15年前,我曾尝试过那条路-那里没有乐趣。现在应该更容易了,至少存在词汇绑定,但是我仍然认为这样做不值得。

如果您想扩展Emacs,那么使用cl-defun的意义就更小了:您的扩展名对其他人将毫无用处,甚至您也无法寻求帮助,因为很少有人会为这样的重大变化而烦恼如此微不足道的基本功能。

关于emacs - Elisp重命名宏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15873346/

10-12 20:46