mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-06 11:55:48 +00:00
(edebug-var-status, edebug-restore-status): New functions.
(edebug-enter, edebug-outside-excursion): Use them.
This commit is contained in:
parent
2c0696b144
commit
5fc58d8323
@ -2241,8 +2241,10 @@ error is signaled again."
|
||||
|
||||
;; Save the outside value of executing macro. (here??)
|
||||
(edebug-outside-executing-macro executing-kbd-macro)
|
||||
(edebug-outside-pre-command-hook pre-command-hook)
|
||||
(edebug-outside-post-command-hook post-command-hook))
|
||||
(edebug-outside-pre-command-hook
|
||||
(edebug-var-status 'pre-command-hook))
|
||||
(edebug-outside-post-command-hook
|
||||
(edebug-var-status 'post-command-hook)))
|
||||
(unwind-protect
|
||||
(let (;; Don't keep reading from an executing kbd macro
|
||||
;; within edebug unless edebug-continue-kbd-macro is
|
||||
@ -2267,10 +2269,11 @@ error is signaled again."
|
||||
edebug-next-execution-mode nil)
|
||||
(edebug-enter edebug-function edebug-args edebug-body))
|
||||
;; Reset global variables in case outside value was changed.
|
||||
(setq executing-kbd-macro edebug-outside-executing-macro
|
||||
pre-command-hook edebug-outside-pre-command-hook
|
||||
post-command-hook edebug-outside-post-command-hook
|
||||
)))
|
||||
(setq executing-kbd-macro edebug-outside-executing-macro)
|
||||
(edebug-restore-status
|
||||
'post-command-hook edebug-outside-post-command-hook)
|
||||
(edebug-restore-status
|
||||
'pre-command-hook edebug-outside-pre-command-hook)))
|
||||
|
||||
(let* ((edebug-data (get edebug-function 'edebug))
|
||||
(edebug-def-mark (car edebug-data)) ; mark at def start
|
||||
@ -2291,6 +2294,30 @@ error is signaled again."
|
||||
(funcall edebug-body))
|
||||
)))
|
||||
|
||||
(defun edebug-var-status (var)
|
||||
"Return a cons cell describing the status of VAR's current binding.
|
||||
The purpose of this function is so you can properly undo
|
||||
subsequent changes to the same binding, by passing the status
|
||||
cons cell to `edebug-restore-status'. The status cons cell
|
||||
has the form (LOCUS . VALUE), where LOCUS can be a buffer
|
||||
\(for a buffer-local binding), a frame (for a frame-local binding),
|
||||
or nil (if the default binding is current)."
|
||||
(cons (variable-binding-locus var)
|
||||
(symbol-value var)))
|
||||
|
||||
(defun edebug-restore-status (var status)
|
||||
"Reset VAR based on STATUS.
|
||||
STATUS should be a list you got from `edebug-var-status'."
|
||||
(let ((locus (car status))
|
||||
(value (cdr status)))
|
||||
(cond ((bufferp locus)
|
||||
(if (buffer-live-p locus)
|
||||
(with-current-buffer locus
|
||||
(set var value))))
|
||||
((framep locus)
|
||||
(modify-frame-parameters locus (list (cons var value))))
|
||||
(t
|
||||
(set var value)))))
|
||||
|
||||
(defun edebug-enter-trace (edebug-body)
|
||||
(let ((edebug-stack-depth (1+ edebug-stack-depth))
|
||||
@ -3511,8 +3538,9 @@ Return the result of the last expression."
|
||||
|
||||
(executing-kbd-macro edebug-outside-executing-macro)
|
||||
(defining-kbd-macro edebug-outside-defining-kbd-macro)
|
||||
(pre-command-hook edebug-outside-pre-command-hook)
|
||||
(post-command-hook edebug-outside-post-command-hook)
|
||||
;; Get the values out of the saved statuses.
|
||||
(pre-command-hook (cdr edebug-outside-pre-command-hook))
|
||||
(post-command-hook (cdr edebug-outside-post-command-hook))
|
||||
|
||||
;; See edebug-display
|
||||
(overlay-arrow-position edebug-outside-o-a-p)
|
||||
@ -3552,13 +3580,18 @@ Return the result of the last expression."
|
||||
|
||||
edebug-outside-executing-macro executing-kbd-macro
|
||||
edebug-outside-defining-kbd-macro defining-kbd-macro
|
||||
edebug-outside-pre-command-hook pre-command-hook
|
||||
edebug-outside-post-command-hook post-command-hook
|
||||
|
||||
edebug-outside-o-a-p overlay-arrow-position
|
||||
edebug-outside-o-a-s overlay-arrow-string
|
||||
edebug-outside-c-i-e-a cursor-in-echo-area
|
||||
))) ; let
|
||||
)
|
||||
|
||||
;; Restore the outside saved values; don't alter
|
||||
;; the outside binding loci.
|
||||
(setcdr edebug-outside-pre-command-hook pre-command-hook)
|
||||
(setcdr edebug-outside-post-command-hook post-command-hook)
|
||||
|
||||
)) ; let
|
||||
))
|
||||
|
||||
(defvar cl-debug-env nil) ;; defined in cl; non-nil when lexical env used.
|
||||
@ -3676,14 +3709,13 @@ Print result in minibuffer."
|
||||
(edebug-safe-prin1-to-string (car values)))))
|
||||
|
||||
(defun edebug-eval-last-sexp ()
|
||||
"Evaluate sexp before point in the outside environment;
|
||||
print value in minibuffer."
|
||||
"Evaluate sexp before point in the outside environment; value in minibuffer."
|
||||
(interactive)
|
||||
(edebug-eval-expression (edebug-last-sexp)))
|
||||
|
||||
(defun edebug-eval-print-last-sexp ()
|
||||
"Evaluate sexp before point in the outside environment;
|
||||
print value into current buffer."
|
||||
"Evaluate sexp before point in the outside environment; insert the value.
|
||||
This prints the value into current buffer."
|
||||
(interactive)
|
||||
(let* ((edebug-form (edebug-last-sexp))
|
||||
(edebug-result-string
|
||||
@ -3698,12 +3730,15 @@ print value into current buffer."
|
||||
|
||||
;;; Edebug Minor Mode
|
||||
|
||||
;; Global GUD bindings for all emacs-lisp-mode buffers.
|
||||
(define-key emacs-lisp-mode-map "\C-x\C-a\C-s" 'edebug-step-mode)
|
||||
(define-key emacs-lisp-mode-map "\C-x\C-a\C-n" 'edebug-next-mode)
|
||||
(define-key emacs-lisp-mode-map "\C-x\C-a\C-c" 'edebug-go-mode)
|
||||
(define-key emacs-lisp-mode-map "\C-x\C-a\C-l" 'edebug-where)
|
||||
(defvar gud-inhibit-global-bindings
|
||||
"*Non-nil means don't do global rebindings of C-x C-a subcommands.")
|
||||
|
||||
;; Global GUD bindings for all emacs-lisp-mode buffers.
|
||||
(unless gud-inhibit-global-bindings
|
||||
(define-key emacs-lisp-mode-map "\C-x\C-a\C-s" 'edebug-step-mode)
|
||||
(define-key emacs-lisp-mode-map "\C-x\C-a\C-n" 'edebug-next-mode)
|
||||
(define-key emacs-lisp-mode-map "\C-x\C-a\C-c" 'edebug-go-mode)
|
||||
(define-key emacs-lisp-mode-map "\C-x\C-a\C-l" 'edebug-where))
|
||||
|
||||
(defvar edebug-mode-map
|
||||
(let ((map (copy-keymap emacs-lisp-mode-map)))
|
||||
|
Loading…
Reference in New Issue
Block a user