]> code.delx.au - gnu-emacs/blobdiff - lisp/emacs-lisp/edebug.el
Make called-interactively-p work for edebug or advised code.
[gnu-emacs] / lisp / emacs-lisp / edebug.el
index 483ed64de208280a378089a414144dd57b7323b8..12311711fe0113c890195ac9cefd18590c513017 100644 (file)
@@ -4268,6 +4268,21 @@ With prefix argument, make it a temporary breakpoint."
 \f
 ;;; Finalize Loading
 
+;; When edebugging a function, some of the sub-expressions are
+;; wrapped in (edebug-enter (lambda () ..)), so we need to teach
+;; called-interactively-p that calls within the inner lambda should refer to
+;; the outside function.
+(add-hook 'called-interactively-p-functions
+          #'edebug--called-interactively-skip)
+(defun edebug--called-interactively-skip (i frame1 frame2)
+  (when (and (eq (car-safe (nth 1 frame1)) 'lambda)
+             (eq (nth 1 (nth 1 frame1)) '())
+             (eq (nth 1 frame2) 'edebug-enter))
+    ;; `edebug-enter' calls itself on its first invocation.
+    (if (eq (nth 1 (internal--called-interactively-p--get-frame i))
+            'edebug-enter)
+        2 1)))
+
 ;; Finally, hook edebug into the rest of Emacs.
 ;; There are probably some other things that could go here.