aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Rudalics2018-12-26 09:09:44 +0100
committerMartin Rudalics2018-12-26 09:09:44 +0100
commitbbc7015e7bcb7ed569ea4d75672fcaacbe291f06 (patch)
tree85ce65ec1b652a5afcc482272072076e14f9e1f8
parent092b36dbd65ce8ab8efb4562a79709b3244ca8a8 (diff)
downloademacs-bbc7015e7bcb7ed569ea4d75672fcaacbe291f06.tar.gz
emacs-bbc7015e7bcb7ed569ea4d75672fcaacbe291f06.zip
Set up debugger buffer earlier and fit window to it (Bug#32825)
* lisp/emacs-lisp/debug.el (debug): Set up debugger buffer before displaying it and advise 'display-buffer' to fit the window to it (Bug#32825).
-rw-r--r--lisp/emacs-lisp/debug.el40
1 files changed, 21 insertions, 19 deletions
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
index b6b1f20675f..5c186f70197 100644
--- a/lisp/emacs-lisp/debug.el
+++ b/lisp/emacs-lisp/debug.el
@@ -236,12 +236,33 @@ first will be printed into the backtrace buffer."
236 ;; Place an extra debug-on-exit for macro's. 236 ;; Place an extra debug-on-exit for macro's.
237 (when (eq 'lambda (car-safe (cadr (backtrace-frame 4)))) 237 (when (eq 'lambda (car-safe (cadr (backtrace-frame 4))))
238 (backtrace-debug 5 t))) 238 (backtrace-debug 5 t)))
239 (with-current-buffer debugger-buffer
240 (unless (derived-mode-p 'debugger-mode)
241 (debugger-mode))
242 (debugger-setup-buffer debugger-args))
243 (when noninteractive
244 ;; If the backtrace is long, save the beginning
245 ;; and the end, but discard the middle.
246 (when (> (count-lines (point-min) (point-max))
247 debugger-batch-max-lines)
248 (goto-char (point-min))
249 (forward-line (/ 2 debugger-batch-max-lines))
250 (let ((middlestart (point)))
251 (goto-char (point-max))
252 (forward-line (- (/ 2 debugger-batch-max-lines)
253 debugger-batch-max-lines))
254 (delete-region middlestart (point)))
255 (insert "...\n"))
256 (goto-char (point-min))
257 (message "%s" (buffer-string))
258 (kill-emacs -1))
239 (pop-to-buffer 259 (pop-to-buffer
240 debugger-buffer 260 debugger-buffer
241 `((display-buffer-reuse-window 261 `((display-buffer-reuse-window
242 display-buffer-in-previous-window 262 display-buffer-in-previous-window
243 display-buffer-below-selected) 263 display-buffer-below-selected)
244 . ((window-min-height . 10) 264 . ((window-min-height . 10)
265 (window-height . fit-window-to-buffer)
245 ,@(when (and (window-live-p debugger-previous-window) 266 ,@(when (and (window-live-p debugger-previous-window)
246 (frame-visible-p 267 (frame-visible-p
247 (window-frame debugger-previous-window))) 268 (window-frame debugger-previous-window)))
@@ -258,25 +279,6 @@ first will be printed into the backtrace buffer."
258 (window-total-height debugger-window))) 279 (window-total-height debugger-window)))
259 (error nil))) 280 (error nil)))
260 (setq debugger-previous-window debugger-window)) 281 (setq debugger-previous-window debugger-window))
261 (unless (derived-mode-p 'debugger-mode)
262 (debugger-mode))
263 (debugger-setup-buffer debugger-args)
264 (when noninteractive
265 ;; If the backtrace is long, save the beginning
266 ;; and the end, but discard the middle.
267 (when (> (count-lines (point-min) (point-max))
268 debugger-batch-max-lines)
269 (goto-char (point-min))
270 (forward-line (/ 2 debugger-batch-max-lines))
271 (let ((middlestart (point)))
272 (goto-char (point-max))
273 (forward-line (- (/ 2 debugger-batch-max-lines)
274 debugger-batch-max-lines))
275 (delete-region middlestart (point)))
276 (insert "...\n"))
277 (goto-char (point-min))
278 (message "%s" (buffer-string))
279 (kill-emacs -1))
280 (message "") 282 (message "")
281 (let ((standard-output nil) 283 (let ((standard-output nil)
282 (buffer-read-only t)) 284 (buffer-read-only t))