如何在Emacs中恢复默认功能?

时间:2014-02-25 20:08:22

标签: emacs elisp

我改变了哔声功能(defun beep () ...,是否可以在不重新启动Emacs的情况下还原它?

3 个答案:

答案 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)))
  1. *scratch*

    (defun beep () "foo")
    ;; beep
    
    (symbol-function 'beep)
    ;; (lambda nil "foo")
    
  2. M-x restore-redefined-function并输入beep

  3. <{1}}中的
  4. *scratch*