]> git.eshelyaron.com Git - emacs.git/commitdiff
(debug): Don't `kill-emacs` upon exit when in batch mode
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 6 Mar 2025 18:02:37 +0000 (13:02 -0500)
committerEshel Yaron <me@eshelyaron.com>
Sun, 9 Mar 2025 10:19:52 +0000 (11:19 +0100)
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

index 470af6556573badeb18a962d3e1a32a131d2493f..89acb38e4f050c2f47516be731ce8152c72a2e4c 100644 (file)
@@ -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.