diff options
| author | Stefan Monnier | 2011-05-31 12:41:14 -0300 |
|---|---|---|
| committer | Stefan Monnier | 2011-05-31 12:41:14 -0300 |
| commit | e227544d7b1e5e22923796929389f4c9bcab44e0 (patch) | |
| tree | b966cb145c2c95e979514ac456ec59d2f720cbb3 | |
| parent | e8296fdc980f927e4e534dc62ce4f436fdf3a779 (diff) | |
| download | emacs-e227544d7b1e5e22923796929389f4c9bcab44e0.tar.gz emacs-e227544d7b1e5e22923796929389f4c9bcab44e0.zip | |
* lisp/emacs-lisp/debug.el (debug): Save&restore not just the buffer's
content but also its previous major mode.
| -rw-r--r-- | lisp/ChangeLog | 5 | ||||
| -rw-r--r-- | lisp/emacs-lisp/debug.el | 21 |
2 files changed, 20 insertions, 6 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e6fdbd2372c..0070f3a3945 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2011-05-31 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 2 | |||
| 3 | * emacs-lisp/debug.el (debug): Save&restore not just the buffer's | ||
| 4 | content but also its previous major mode. | ||
| 5 | |||
| 1 | 2011-05-31 Helmut Eller <eller.helmut@gmail.com> | 6 | 2011-05-31 Helmut Eller <eller.helmut@gmail.com> |
| 2 | 7 | ||
| 3 | * debug.el (debug): Restore the previous content of the | 8 | * debug.el (debug): Restore the previous content of the |
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el index 4a43f59c9e2..28962595ace 100644 --- a/lisp/emacs-lisp/debug.el +++ b/lisp/emacs-lisp/debug.el | |||
| @@ -118,9 +118,12 @@ first will be printed into the backtrace buffer." | |||
| 118 | (let (debugger-value | 118 | (let (debugger-value |
| 119 | (debug-on-error nil) | 119 | (debug-on-error nil) |
| 120 | (debug-on-quit nil) | 120 | (debug-on-quit nil) |
| 121 | (debugger-previous-state | ||
| 122 | (if (get-buffer "*Backtrace*") | ||
| 123 | (with-current-buffer (get-buffer "*Backtrace*") | ||
| 124 | (list major-mode (buffer-string))))) | ||
| 121 | (debugger-buffer (get-buffer-create "*Backtrace*")) | 125 | (debugger-buffer (get-buffer-create "*Backtrace*")) |
| 122 | (debugger-old-buffer (current-buffer)) | 126 | (debugger-old-buffer (current-buffer)) |
| 123 | (debugger-previous-contents nil) | ||
| 124 | (debugger-step-after-exit nil) | 127 | (debugger-step-after-exit nil) |
| 125 | (debugger-will-be-back nil) | 128 | (debugger-will-be-back nil) |
| 126 | ;; Don't keep reading from an executing kbd macro! | 129 | ;; Don't keep reading from an executing kbd macro! |
| @@ -182,7 +185,6 @@ first will be printed into the backtrace buffer." | |||
| 182 | (when (eq 'lambda (car-safe (cadr (backtrace-frame 4)))) | 185 | (when (eq 'lambda (car-safe (cadr (backtrace-frame 4)))) |
| 183 | (backtrace-debug 5 t))) | 186 | (backtrace-debug 5 t))) |
| 184 | (pop-to-buffer debugger-buffer) | 187 | (pop-to-buffer debugger-buffer) |
| 185 | (setq debugger-previous-contents (buffer-string)) | ||
| 186 | (debugger-mode) | 188 | (debugger-mode) |
| 187 | (debugger-setup-buffer debugger-args) | 189 | (debugger-setup-buffer debugger-args) |
| 188 | (when noninteractive | 190 | (when noninteractive |
| @@ -216,9 +218,6 @@ first will be printed into the backtrace buffer." | |||
| 216 | ;; recreate it every time the debugger stops, so instead we'll | 218 | ;; recreate it every time the debugger stops, so instead we'll |
| 217 | ;; erase it (and maybe hide it) but keep it alive. | 219 | ;; erase it (and maybe hide it) but keep it alive. |
| 218 | (with-current-buffer debugger-buffer | 220 | (with-current-buffer debugger-buffer |
| 219 | (erase-buffer) | ||
| 220 | (insert debugger-previous-contents) | ||
| 221 | (fundamental-mode) | ||
| 222 | (with-selected-window (get-buffer-window debugger-buffer 0) | 221 | (with-selected-window (get-buffer-window debugger-buffer 0) |
| 223 | (when (and (window-dedicated-p (selected-window)) | 222 | (when (and (window-dedicated-p (selected-window)) |
| 224 | (not debugger-will-be-back)) | 223 | (not debugger-will-be-back)) |
| @@ -235,7 +234,17 @@ first will be printed into the backtrace buffer." | |||
| 235 | ;; to be left at the top-level, still working on how | 234 | ;; to be left at the top-level, still working on how |
| 236 | ;; best to do that. | 235 | ;; best to do that. |
| 237 | (bury-buffer)))) | 236 | (bury-buffer)))) |
| 238 | (kill-buffer debugger-buffer)) | 237 | (unless debugger-previous-state |
| 238 | (kill-buffer debugger-buffer))) | ||
| 239 | ;; Restore the previous state of the debugger-buffer, in case we were | ||
| 240 | ;; in a recursive invocation of the debugger. | ||
| 241 | (when (and debugger-previous-state | ||
| 242 | (buffer-live-p debugger-buffer)) | ||
| 243 | (with-current-buffer debugger-buffer | ||
| 244 | (let ((inhibit-read-only t)) | ||
| 245 | (erase-buffer) | ||
| 246 | (insert (nth 1 debugger-previous-state)) | ||
| 247 | (funcall (nth 0 debugger-previous-state))))) | ||
| 239 | (with-timeout-unsuspend debugger-with-timeout-suspend) | 248 | (with-timeout-unsuspend debugger-with-timeout-suspend) |
| 240 | (set-match-data debugger-outer-match-data))) | 249 | (set-match-data debugger-outer-match-data))) |
| 241 | ;; Put into effect the modified values of these variables | 250 | ;; Put into effect the modified values of these variables |