emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r112173: * lisp/emacs-lisp/edebug.el


From: Stefan Monnier
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r112173: * lisp/emacs-lisp/edebug.el (edebug-mode): Make it a minor mode.
Date: Thu, 28 Mar 2013 12:33:06 -0400
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 112173
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Thu 2013-03-28 12:33:06 -0400
message:
  * lisp/emacs-lisp/edebug.el (edebug-mode): Make it a minor mode.
  (edebug--recursive-edit): Use it.
  (edebug-kill-buffer): Don't let-bind kill-buffer-hook.
  (edebug-temp-display-freq-count): Don't let-bind buffer-read-only.
modified:
  lisp/ChangeLog
  lisp/emacs-lisp/edebug.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-03-28 03:26:37 +0000
+++ b/lisp/ChangeLog    2013-03-28 16:33:06 +0000
@@ -1,3 +1,10 @@
+2013-03-28  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/edebug.el (edebug-mode): Make it a minor mode.
+       (edebug--recursive-edit): Use it.
+       (edebug-kill-buffer): Don't let-bind kill-buffer-hook.
+       (edebug-temp-display-freq-count): Don't let-bind buffer-read-only.
+
 2013-03-28  Leo Liu  <address@hidden>
 
        * vc/vc-bzr.el (vc-bzr-revert): Don't backup.  (Bug#14066)

=== modified file 'lisp/emacs-lisp/edebug.el'
--- a/lisp/emacs-lisp/edebug.el 2013-03-24 06:42:25 +0000
+++ b/lisp/emacs-lisp/edebug.el 2013-03-28 16:33:06 +0000
@@ -54,6 +54,7 @@
 
 (require 'macroexp)
 (eval-when-compile (require 'cl-lib))
+(eval-when-compile (require 'pcase))
 
 ;;; Options
 
@@ -2072,11 +2073,6 @@
 
 (defvar edebug-active nil)  ;; Non-nil when edebug is active
 
-;;; add minor-mode-alist entry
-(or (assq 'edebug-active minor-mode-alist)
-    (setq minor-mode-alist (cons (list 'edebug-active " *Debugging*")
-                                minor-mode-alist)))
-
 (defvar edebug-stack nil)
 ;; Stack of active functions evaluated via edebug.
 ;; Should be nil at the top level.
@@ -2715,8 +2711,7 @@
   ;; Start up a recursive edit inside of edebug.
   ;; The current buffer is the edebug-buffer, which is put into edebug-mode.
   ;; Assume that none of the variables below are buffer-local.
-  (let ((edebug-buffer-read-only buffer-read-only)
-       ;; match-data must be done in the outside buffer
+  (let (;; match-data must be done in the outside buffer
        (edebug-outside-match-data
         (with-current-buffer edebug-outside-buffer ; in case match buffer 
different
           (match-data)))
@@ -2730,8 +2725,6 @@
        ;; during a recursive-edit
        edebug-inside-windows
 
-       (edebug-outside-map (current-local-map))
-
         ;; Save the outside value of executing macro.  (here??)
         (edebug-outside-executing-macro executing-kbd-macro)
         (edebug-outside-pre-command-hook
@@ -2804,10 +2797,9 @@
                   (not (memq arg-mode '(after error))))
              (message "Break"))
 
-         (setq buffer-read-only t)
          (setq signal-hook-function nil)
 
-         (edebug-mode)
+         (edebug-mode 1)
          (unwind-protect
              (recursive-edit)          ;  <<<<<<<<<< Recursive edit
 
@@ -2828,10 +2820,7 @@
                  (set-buffer edebug-buffer)
                  (if (memq edebug-execution-mode '(go Go-nonstop))
                      (edebug-overlay-arrow))
-                 (setq buffer-read-only edebug-buffer-read-only)
-                 (use-local-map edebug-outside-map)
-                 (remove-hook 'kill-buffer-hook 'edebug-kill-buffer t)
-                 )
+                  (edebug-mode -1))
              ;; gotta have a buffer to let its buffer local variables be set
              (get-buffer-create " bogus edebug buffer"))
            ));; inner let
@@ -3773,7 +3762,9 @@
   (interactive)
   (describe-function 'edebug-mode))
 
-(defun edebug-mode ()
+(defvar edebug--mode-saved-vars nil)
+
+(define-minor-mode edebug-mode
   "Mode for Emacs Lisp buffers while in Edebug.
 
 In addition to all Emacs Lisp commands (except those that modify the
@@ -3807,20 +3798,32 @@
 `edebug-on-signal'
 `edebug-unwrap-results'
 `edebug-global-break-condition'"
+  :lighter " *Debugging*"
+  :keymap edebug-mode-map
   ;; If the user kills the buffer in which edebug is currently active,
   ;; exit to top level, because the edebug command loop can't usefully
   ;; continue running in such a case.
   ;;
-  ;; Append `edebug-kill-buffer' to the hook to avoid interfering with
-  ;; other entries that are ungarded against deleted buffer.
-  (add-hook 'kill-buffer-hook 'edebug-kill-buffer t t)
-  (use-local-map edebug-mode-map))
+  (if (not edebug-mode)
+      (progn
+        (while edebug--mode-saved-vars
+          (let ((setting (pop edebug--mode-saved-vars)))
+            (if (consp setting)
+                (set (car setting) (cdr setting))
+              (kill-local-variable setting))))
+        (remove-hook 'kill-buffer-hook 'edebug-kill-buffer t))
+    (pcase-dolist (`(,var . ,val) '((buffer-read-only . t)))
+      (push
+       (if (local-variable-p var) var (cons var (symbol-value var)))
+       edebug--mode-saved-vars)
+      (set (make-local-variable var) val))
+    ;; Append `edebug-kill-buffer' to the hook to avoid interfering with
+    ;; other entries that are ungarded against deleted buffer.
+    (add-hook 'kill-buffer-hook 'edebug-kill-buffer t t)))
 
 (defun edebug-kill-buffer ()
   "Used on `kill-buffer-hook' when Edebug is operating in a buffer of Lisp 
code."
-  (let (kill-buffer-hook)
-    (kill-buffer (current-buffer)))
-  (top-level))
+  (run-with-timer 0 nil #'top-level))
 
 ;;; edebug eval list mode
 
@@ -4143,7 +4146,7 @@
 It is removed when you hit any char."
   ;; This seems not to work with Emacs 18.59. It undoes too far.
   (interactive)
-  (let ((buffer-read-only nil))
+  (let ((inhibit-read-only t))
     (undo-boundary)
     (edebug-display-freq-count)
     (setq unread-command-events


reply via email to

[Prev in Thread] Current Thread [Next in Thread]