From ee1f5d32a00be976d2185d37631edb2812c25a6b Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 6 Mar 2025 13:02:37 -0500 Subject: [PATCH] (debug): Don't `kill-emacs` upon exit when in batch mode AFAICT this is a left over code from many years ago before the `debug` special case was added to `condition-case` and at a time where exiting from `debug` did not proceed to handle remaining handlers. In the usual case where we indeed want to kill Emacs, `signal_or_quit` does it for us. * lisp/emacs-lisp/debug.el (debug): Don't `kill-emacs` upon exit when in batch mode (bug#76786) (cherry picked from commit 82affcaeff8b7a0ed1f30adbf5905f934c4cebaf) --- lisp/emacs-lisp/debug.el | 73 ++++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 37 deletions(-) diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el index 470af655657..89acb38e4f0 100644 --- a/lisp/emacs-lisp/debug.el +++ b/lisp/emacs-lisp/debug.el @@ -249,11 +249,11 @@ the debugger will not be entered." ;; Place an extra debug-on-exit for macro's. (when (eq 'lambda (car-safe (cadr (backtrace-frame 1 base)))) (backtrace-debug 2 t base)))) - (with-current-buffer debugger-buffer - (unless (derived-mode-p 'debugger-mode) - (debugger-mode)) - (debugger-setup-buffer debugger-args) - (when non-interactive-frame + (set-buffer debugger-buffer) + (unless (derived-mode-p 'debugger-mode) + (debugger-mode)) + (debugger-setup-buffer debugger-args) + (if non-interactive-frame ;; If the backtrace is long, save the beginning ;; and the end, but discard the middle. (let ((inhibit-read-only t)) @@ -265,38 +265,37 @@ the debugger will not be entered." (goto-char (point-max)) (forward-line (- (/ debugger-batch-max-lines 2))) (delete-region middlestart (point))) - (insert "...\n"))) - (message "%s" (buffer-string)) - (kill-emacs -1))) - (pop-to-buffer - debugger-buffer - `((display-buffer-reuse-window - display-buffer-in-previous-window - display-buffer-below-selected) - . ((window-min-height . 10) - (window-height . fit-window-to-buffer) - ,@(when (and (window-live-p debugger-previous-window) - (frame-visible-p - (window-frame debugger-previous-window))) - `((previous-window . ,debugger-previous-window)))))) - (setq debugger-window (selected-window)) - (when debugger-jumping-flag - ;; Try to restore previous height of debugger - ;; window. - (condition-case nil - (window-resize - debugger-window - (- debugger-previous-window-height - (window-total-height debugger-window))) - (error nil)) - (setq debugger-previous-window debugger-window)) - (message "") - (let ((standard-output nil) - (buffer-read-only t)) - (message "") - ;; Make sure we unbind buffer-read-only in the right buffer. - (save-excursion - (recursive-edit)))) + (insert "...\n")) + (message "%s" (buffer-string))) + (pop-to-buffer + debugger-buffer + `((display-buffer-reuse-window + display-buffer-in-previous-window + display-buffer-below-selected) + . ((window-min-height . 10) + (window-height . fit-window-to-buffer) + ,@(when (and (window-live-p debugger-previous-window) + (frame-visible-p + (window-frame debugger-previous-window))) + `((previous-window . ,debugger-previous-window)))))) + (setq debugger-window (selected-window)) + (when debugger-jumping-flag + ;; Try to restore previous height of debugger + ;; window. + (condition-case nil + (window-resize + debugger-window + (- debugger-previous-window-height + (window-total-height debugger-window))) + (error nil)) + (setq debugger-previous-window debugger-window)) + (message "") + (let ((standard-output nil) + (buffer-read-only t)) + (message "") + ;; Make sure we unbind buffer-read-only in the right buffer. + (save-excursion + (recursive-edit))))) (when (and (window-live-p debugger-window) (eq (window-buffer debugger-window) debugger-buffer)) ;; Record height of debugger window. -- 2.39.5