我改变了哔声功能(defun beep () ...
,是否可以在不重新启动Emacs的情况下还原它?
答案 0 :(得分:2)
只需访问原始定义,然后对其进行评估。
如果需要,您可以启动第二个Emacs实例以查找代码:C-h f beep RET
并点击源代码链接。
(我通常会说find-function
,但在这种情况下,beep是别名,在链接后面会转到defalias
行,而find-function会转到源定义。)
答案 1 :(得分:1)
除非您先保存(symbol-function 'ding)
,否则不会。如果你这样做,那么你可以恢复它(使用fset
)。如果没有,你不能,因为ding
(又名beep
)是在C中定义的,而不是Lisp。
如果它是在Lisp中定义的那么你可以做@phils建议的那些。
答案 2 :(得分:0)
这可能是一个侥幸,但我现在可以用:
(defun restore-redefined-function (name)
(interactive (find-function-read))
(save-window-excursion
(find-function name)
(eval-defun nil)))
在*scratch*
:
(defun beep () "foo")
;; beep
(symbol-function 'beep)
;; (lambda nil "foo")
M-x restore-redefined-function
并输入beep
。
:
*scratch*