From e2acf4d29d6f03c7b8c6fbeb61ed1f4a6ef5b1fd Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Sun, 20 Oct 2019 11:29:34 +0200 Subject: [PATCH] New command edebug-remove-instrumentation * doc/lispref/edebug.texi (Instrumenting): Document it. * lisp/emacs-lisp/edebug.el (edebug-remove-instrumentation): New command (bug#15843). --- doc/lispref/edebug.texi | 4 ++++ etc/NEWS | 5 +++++ lisp/emacs-lisp/edebug.el | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/doc/lispref/edebug.texi b/doc/lispref/edebug.texi index 2c0ee3969b9..efbba40916e 100644 --- a/doc/lispref/edebug.texi +++ b/doc/lispref/edebug.texi @@ -230,6 +230,10 @@ evaluating forms that never instrument them: from a file with @code{load}, and from the minibuffer with @code{eval-expression} (@kbd{M-:}). +@findex edebug-remove-instrumentation + If you want to remove Edebug instrumentation from all functions, you +can use the @code{edebug-remove-instrumentation} command. + @xref{Edebug Eval}, for other evaluation functions available inside of Edebug. diff --git a/etc/NEWS b/etc/NEWS index e49dc0c9982..21fbdb90af7 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1462,6 +1462,11 @@ the Elisp manual for documentation of the new mode and its commands. ** Edebug ++++ +*** New command 'edebug-remove-instrumentation. +This command removes Edebug instrumentation from all functions that +have been instrumented. + +++ *** The runtime behavior of Edebug's instrumentation can be changed using the new variables 'edebug-behavior-alist', diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index 85c56f43486..e0a4eb3db5a 100644 --- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el @@ -4423,5 +4423,23 @@ With prefix argument, make it a temporary breakpoint." ;; Continue standard unloading. nil) +(defun edebug-remove-instrumentation () + "Remove Edebug instrumentation from all functions." + (interactive) + (let ((functions nil)) + (mapatoms + (lambda (symbol) + (when (and (functionp symbol) + (get symbol 'edebug)) + (let ((unwrapped (edebug-unwrap* (symbol-function symbol)))) + (unless (equal unwrapped (symbol-function symbol)) + (push symbol functions) + (setf (symbol-function symbol) unwrapped))))) + obarray) + (if (not functions) + (message "Found no functions to remove instrumentation from") + (message "Remove edebug instrumentation from %s" + (mapconcat #'symbol-name functions ", "))))) + (provide 'edebug) ;;; edebug.el ends here -- 2.39.2