]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow using edebug-remove-instrumentation more fine-grained
authorLars Ingebrigtsen <larsi@gnus.org>
Thu, 14 Nov 2019 05:19:59 +0000 (06:19 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Thu, 14 Nov 2019 05:20:04 +0000 (06:20 +0100)
* lisp/emacs-lisp/edebug.el (edebug-remove-instrumentation):
Prompt the user for what functions to remove instrumentation from
a la cancel-edebug-on-entry (bug#38195).

lisp/emacs-lisp/edebug.el

index d81052318cb66cd3bcb02b86b500c56197ef8a18..6b55d7cff03f986e5d6404a03510fcb5a6a130d3 100644 (file)
@@ -4571,23 +4571,37 @@ 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 ", ")))))
+(defun edebug-remove-instrumentation (functions)
+  "Remove Edebug instrumentation from FUNCTIONS.
+Interactively, the user is prompted for the function to remove
+instrumentation for, defaulting to all functions."
+  (interactive
+   (list
+    (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)))))
+       obarray)
+      (unless functions
+        (error "Found no functions to remove instrumentation from"))
+      (let ((name
+             (completing-read
+              "Remove instrumentation from (default all functions): "
+              functions)))
+        (if (and name
+                 (not (equal name "")))
+            (list (intern name))
+          functions)))))
+  ;; Remove instrumentation.
+  (dolist (symbol functions)
+    (setf (symbol-function symbol)
+          (edebug-unwrap* (symbol-function symbol))))
+  (message "Removed edebug instrumentation from %s"
+           (mapconcat #'symbol-name functions ", ")))
 
 (provide 'edebug)
 ;;; edebug.el ends here