如何重命名elisp宏?为了更准确,我希望使defun
成为cl-defun
的同义词。
我不在乎时间或内存开销。
最佳答案
摘要
我认为您无法做到-至少不容易做到。
由于cl-defun
扩展为defun
,因此如果使用明显的defun
,则在使用(defalias 'defun 'cl-defun)
时将获得一个无限的宏扩展循环。
这是一种方法
所以您需要做的是
保存原始的defun
:(fset 'defun-original (symbol-function 'defun))
。
复制cl-defun
中cl-macs.el
的定义,将defun
替换为defun-original
。
使用defun
:cl-defun
将defalias
替换为(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/