[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#38927: [patch] Backtrace printing in non-interactive mode doesn't us
From: |
Stefan Kangas |
Subject: |
bug#38927: [patch] Backtrace printing in non-interactive mode doesn't use cl-prin1 etc. |
Date: |
Sat, 29 Feb 2020 06:06:23 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) |
Hi Stefan,
Do you have any comments on the below patch? It seems to relate to a
commit of yours, but has unfortunately not received any reply yet.
Thanks in advance.
Best regards,
Stefan Kangas
Paul Pogonyshev <pogonyshev@gmail.com> writes:
> tags
>
> Backtrace printing in batch mode ignores all customizations, at least:
> - all `cl-print-object' overrides (`debugger-print-function');
> - `print-level', `print-length' and friends;
> - `debugger-batch-max-lines'.
>
> The reason is this commit:
>
> 7228488effa78dcb75284cb6d247b24804e0e7f5
> Author: Stefan Monnier <monnier@iro.umontreal.ca>
> AuthorDate: 2018-04-02 00:23:20 -0400
> [...]
>
> * lisp/emacs-lisp/debug.el (debug): Don't hang upon error in initial-frame.
>
> [...]
> + ((and (eq t (framep (selected-frame)))
> + (equal "initial_terminal" (terminal-name)))
> + ;; We're in the initial-frame (where `message' just outputs to stdout) so
> + ;; there's no tty or GUI frame to display the backtrace and interact with
> + ;; it: just dump a backtrace to stdout.
> + ;; This happens for example while handling an error in code from
> + ;; early-init.el with --debug-init.
> + (message "Error: %S" args)
> [...]
>
> The commit added a "failsafe" mode for (quoting) "initial-frame (where
> `message' just outputs to stdout) so there's no tty or GUI frame".
> This failsafe mode is also erroneously triggered in batch mode. It was
> never meant for it: you can see a couple of uses of `noninteractive'
> in the next `cond' branch, but execution now never gets to it.
>
> Patch attached:
> - don't use this "failsafe" mode when running non-interactively;
> - repair for the latest changes in backtrace generation (apparently,
> before the buffer was not read-only);
> - repair adjustment for `debugger-batch-max-lines' which didn't make
> any sense and didn't achieve what it claimed in the comment.
>
> Paul
>
> From 180f4a4f771696512af31ded93057713a5507147 Mon Sep 17 00:00:00 2001
> From: Paul Pogonyshev <pogonyshev@gmail.com>
> Date: Sat, 4 Jan 2020 22:47:24 +0100
> Subject: [PATCH] Don't apply the special case to non-interactive mode in
> `debug'
>
> ---
> lisp/emacs-lisp/debug.el | 25 +++++++++++++------------
> 1 file changed, 13 insertions(+), 12 deletions(-)
>
> diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
> index 3df0ba4a65..b6c58b8c7b 100644
> --- a/lisp/emacs-lisp/debug.el
> +++ b/lisp/emacs-lisp/debug.el
> @@ -172,7 +172,8 @@ debug
> (inhibit-redisplay
> ;; Don't really try to enter debugger within an eval from redisplay.
> debugger-value)
> - ((and (eq t (framep (selected-frame)))
> + ((and (not noninteractive)
> + (eq t (framep (selected-frame)))
> (equal "initial_terminal" (terminal-name)))
> ;; We're in the initial-frame (where `message' just outputs to stdout) so
> ;; there's no tty or GUI frame to display the backtrace and interact with
> @@ -246,17 +247,17 @@ debug
> (when noninteractive
> ;; If the backtrace is long, save the beginning
> ;; and the end, but discard the middle.
> - (when (> (count-lines (point-min) (point-max))
> - debugger-batch-max-lines)
> - (goto-char (point-min))
> - (forward-line (/ 2 debugger-batch-max-lines))
> - (let ((middlestart (point)))
> - (goto-char (point-max))
> - (forward-line (- (/ 2 debugger-batch-max-lines)
> - debugger-batch-max-lines))
> - (delete-region middlestart (point)))
> - (insert "...\n"))
> - (goto-char (point-min))
> + (let ((inhibit-read-only t))
> + (when (> (count-lines (point-min) (point-max))
> + debugger-batch-max-lines)
> + (goto-char (point-min))
> + (forward-line (/ debugger-batch-max-lines 4))
> + (let ((middlestart (point)))
> + (goto-char (point-max))
> + (forward-line (- (/ 2 debugger-batch-max-lines)
> + debugger-batch-max-lines))
> + (delete-region middlestart (point)))
> + (insert "...\n")))
> (message "%s" (buffer-string))
> (kill-emacs -1)))
> (pop-to-buffer
- bug#38927: [patch] Backtrace printing in non-interactive mode doesn't use cl-prin1 etc.,
Stefan Kangas <=