unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Backtrace printing in batch mode ignores all customizations
@ 2019-12-16 22:34 Paul Pogonyshev
  2019-12-21  9:22 ` Eli Zaretskii
  2020-01-04 22:44 ` Stefan Monnier
  0 siblings, 2 replies; 22+ messages in thread
From: Paul Pogonyshev @ 2019-12-16 22:34 UTC (permalink / raw)
  To: Emacs developers

Apparently it is because of 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 condition seems to always be true when `noninteractive' is t. Is
this intentional? It appears to mean that all debug/backtrace
customizations in batch mode are meaningless, since debugger just goes
the "failsafe" route and prints backtrace with simple `message' calls
now.

Please CC me, I'm not subscribed.

Paul



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2019-12-16 22:34 Backtrace printing in batch mode ignores all customizations Paul Pogonyshev
@ 2019-12-21  9:22 ` Eli Zaretskii
  2019-12-21 17:07   ` Paul Pogonyshev
  2020-01-04 22:44 ` Stefan Monnier
  1 sibling, 1 reply; 22+ messages in thread
From: Eli Zaretskii @ 2019-12-21  9:22 UTC (permalink / raw)
  To: Paul Pogonyshev; +Cc: emacs-devel

> From: Paul Pogonyshev <pogonyshev@gmail.com>
> Date: Mon, 16 Dec 2019 23:34:42 +0100
> 
> +   ((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 condition seems to always be true when `noninteractive' is t. Is
> this intentional? It appears to mean that all debug/backtrace
> customizations in batch mode are meaningless, since debugger just goes
> the "failsafe" route and prints backtrace with simple `message' calls
> now.

Can you please elaborate about the debug/backtrace customizations you
did, which are bypassed due to this code?  What are those
customizations supposed to do?



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2019-12-21  9:22 ` Eli Zaretskii
@ 2019-12-21 17:07   ` Paul Pogonyshev
  0 siblings, 0 replies; 22+ messages in thread
From: Paul Pogonyshev @ 2019-12-21 17:07 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Emacs developers

It's not really about _my_ customizations. Basically, this "failsafe"
mode in `debug' bypasses even e.g. built-in Emacs
`debugger-print-function'.

Here is an example (it has nothing to do with `registry', I just
needed some EIEIO class to illustrate):

$ emacs -Q --batch --eval "(let ((debug-on-error t)) (require
'registry) (defun foo (x) bar) (foo (registry-db)))"
Error: (error (void-variable bar))
 (foo #s(registry-db unbound nil 2305843009213693951 0.1 nil nil
#s(hash-table size 100 test eql rehash-size 2.0 rehash-threshold
0.8125 data ( ...)) #s(hash-table size 10000 test equal rehash-size
2.0 rehash-threshold 0.8125 data ( ...))))
 (let ((debug-on-error t)) (require 'registry) (defun foo (x) bar)
(foo (registry-db)))
 (eval (let ((debug-on-error t)) (require 'registry) (defun foo (x)
bar) (foo (registry-db))) t)
 (command-line-1 ("--eval" "(let ((debug-on-error t)) (require
'registry) (defun foo (x) bar) (foo (registry-db)))"))
 (command-line)
 (normal-top-level)

And now with a workaround that disables this "failsafe" mode:

$ emacs -Q --batch --eval "(advice-add 'terminal-name :override
(lambda () \"workaround\"))" --eval "(let ((debug-on-error t))
(require 'registry) (defun foo (x) bar) (foo (registry-db)))"
Debugger entered--Lisp error: (void-variable bar)
 foo(#<registry-db registry-db-1575c8f95a00>)
 (let ((debug-on-error t)) (require 'registry) (defun foo (x) bar)
(foo (registry-db)))
 eval((let ((debug-on-error t)) (require 'registry) (defun foo (x)
bar) (foo (registry-db))) t)
 command-line-1(("--eval" "(advice-add 'terminal-name :override
(lambda () \"w..." "--eval" "(let ((debug-on-error t)) (require
'registry) (def..."))
 command-line()
 normal-top-level()

Without the workaround, `debugger-print-function' (i.e. `cl-prin1') is
never called and in the second line of output you can see
"#s(registry-db ..."). With the workaround `cl-prin1' is called where
it should be, and you can see "#<registry-db ..." instead.

I'm not sure if the "failsafe" mode is meant to operate in batch mode
or not: I traced it down to the commit where it was added, but the
commit doesn't state the reason for the change. If "failsafe" is only
meant for when exceptions happen in normal mode before Emacs is
properly initialized, then adding "(not noninteractive)" to its
condition should be enough. If it is actually meant (also) for batch
mode, it should work more like the "normal" debugging backtrace
generating code, so that exceptions you see inside normal Emacs and
when printed from batch mode look the same.

Paul


On Sat, 21 Dec 2019 at 10:22, Eli Zaretskii <eliz@gnu.org> wrote:
>
> > From: Paul Pogonyshev <pogonyshev@gmail.com>
> > Date: Mon, 16 Dec 2019 23:34:42 +0100
> >
> > +   ((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 condition seems to always be true when `noninteractive' is t. Is
> > this intentional? It appears to mean that all debug/backtrace
> > customizations in batch mode are meaningless, since debugger just goes
> > the "failsafe" route and prints backtrace with simple `message' calls
> > now.
>
> Can you please elaborate about the debug/backtrace customizations you
> did, which are bypassed due to this code?  What are those
> customizations supposed to do?



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2019-12-16 22:34 Backtrace printing in batch mode ignores all customizations Paul Pogonyshev
  2019-12-21  9:22 ` Eli Zaretskii
@ 2020-01-04 22:44 ` Stefan Monnier
  2020-01-04 23:12   ` Paul Pogonyshev
  1 sibling, 1 reply; 22+ messages in thread
From: Stefan Monnier @ 2020-01-04 22:44 UTC (permalink / raw)
  To: Paul Pogonyshev; +Cc: Emacs developers

> +    ;; 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 condition seems to always be true when `noninteractive' is t.

The `noninteractive` case is indeed not the one for which this code
was added.  I guess we can conditionalize it on `noninteractive`, but it
would be worthwhile looking at the code which causes the
`noninteractive` case (without the above "failsafe") to dump
a stacktrace on stderr, to see if the two could be unified?


        Stefan




^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-04 22:44 ` Stefan Monnier
@ 2020-01-04 23:12   ` Paul Pogonyshev
  2020-01-04 23:31     ` Stefan Monnier
  0 siblings, 1 reply; 22+ messages in thread
From: Paul Pogonyshev @ 2020-01-04 23:12 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Emacs developers

I submitted a proposed patch as bug #38927
(https://debbugs.gnu.org/cgi/bugreport.cgi?bug=38927) a few hours ago
since I thought this thread got ignored. It wasn't enough to just
decouple non-interactive from the "failsafe": it got rusty in the
meanwhile and no longer worked after just adding "(not
noninteractive)" condition. In the patch I didn't try to unify your
"failsafe" mode with non-interactive use, since I don't really know
what you wrote the commit for.

But yes, it does look logical to unify the two cases. I would try
removing the failsafe mode altogether, add sth. like

    (let ((backtrace-to-stderr (or noninteractive
[current-failsafe-condition]))) ...

and replace the two uses of `noninteractive' later with this new
variable. But I don't really know how to test this.

Paul

On Sat, 4 Jan 2020 at 23:44, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>
> > +    ;; 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 condition seems to always be true when `noninteractive' is t.
>
> The `noninteractive` case is indeed not the one for which this code
> was added.  I guess we can conditionalize it on `noninteractive`, but it
> would be worthwhile looking at the code which causes the
> `noninteractive` case (without the above "failsafe") to dump
> a stacktrace on stderr, to see if the two could be unified?
>
>
>         Stefan
>



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-04 23:12   ` Paul Pogonyshev
@ 2020-01-04 23:31     ` Stefan Monnier
  2020-01-12 15:49       ` Paul Pogonyshev
  0 siblings, 1 reply; 22+ messages in thread
From: Stefan Monnier @ 2020-01-04 23:31 UTC (permalink / raw)
  To: Paul Pogonyshev; +Cc: Emacs developers

> noninteractive)" condition. In the patch I didn't try to unify your
> "failsafe" mode with non-interactive use, since I don't really know
> what you wrote the commit for.

The commit was specifically prompted by the case mentioned in the comment:

      ;; This happens for example while handling an error in code from
      ;; early-init.el with --debug-init.

I can't remember the exact previous behavior, but it was not right (you
got neither a good *backtrace* because the GUI wasn't up, nor a clean
stacktrace on stdout/stderr).


        Stefan




^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-04 23:31     ` Stefan Monnier
@ 2020-01-12 15:49       ` Paul Pogonyshev
  2020-01-13 19:23         ` Stefan Monnier
  2020-01-27  3:55         ` Stefan Monnier
  0 siblings, 2 replies; 22+ messages in thread
From: Paul Pogonyshev @ 2020-01-12 15:49 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Emacs developers

[-- Attachment #1: Type: text/plain, Size: 1560 bytes --]

Here is a proposed patch that unifies the two print-backtrace-and-quit
cases (batch mode and the failsafe). The patch is large mostly because
of required reindenting, in fact only 15-20 lines are changed. I
tested that it works as expected in batch mode, but don't know how to
test the failsafe, I never did this. Please test yourself. I also
verified that it doesn't change the normal (interactive) backtrace.

How I tested in batch mode:

$ emacs --batch --eval "(let ((debug-on-error t)) (require 'registry)
(defun bar () (bar)) (defun foo (x) (bar)) (foo (registry-db)))"

- must use `cl-prin1' for the dummy registry object;
- must properly cut out the middle from the intentionally very long backtrace.

I don't have access to Emacs repository, so I cannot apply it myself.
I can only write emails and hope that someone applies the patches or
otherwise does something about the problem.

Paul

On Sun, 5 Jan 2020 at 00:31, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>
> > noninteractive)" condition. In the patch I didn't try to unify your
> > "failsafe" mode with non-interactive use, since I don't really know
> > what you wrote the commit for.
>
> The commit was specifically prompted by the case mentioned in the comment:
>
>       ;; This happens for example while handling an error in code from
>       ;; early-init.el with --debug-init.
>
> I can't remember the exact previous behavior, but it was not right (you
> got neither a good *backtrace* because the GUI wasn't up, nor a clean
> stacktrace on stdout/stderr).
>
>
>         Stefan
>

[-- Attachment #2: 0001-Reuse-backtrace-formatting-improvements-in-batch-mod.patch --]
[-- Type: text/x-patch, Size: 13838 bytes --]

From b845aa80815b3b413822a16e688343ef9236a4df Mon Sep 17 00:00:00 2001
From: Paul Pogonyshev <pogonyshev@gmail.com>
Date: Sun, 12 Jan 2020 16:37:15 +0100
Subject: [PATCH] Reuse backtrace formatting improvements in batch mode
 (bug#38927)

---
 lisp/emacs-lisp/debug.el | 291 +++++++++++++++++++--------------------
 1 file changed, 141 insertions(+), 150 deletions(-)

diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
index f67aa89728..2e7f7d7e2b 100644
--- a/lisp/emacs-lisp/debug.el
+++ b/lisp/emacs-lisp/debug.el
@@ -168,158 +168,149 @@ debug
 If `inhibit-redisplay' is non-nil when this function is called,
 the debugger will not be entered."
   (interactive)
-  (cond
-   (inhibit-redisplay
-    ;; Don't really try to enter debugger within an eval from redisplay.
-    debugger-value)
-   ((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)
-    (let ((print-escape-newlines t)
-          (print-escape-control-characters t)
-          (print-level 8)
-          (print-length 50)
-          (skip t))             ;Skip the first frame (i.e. the `debug' frame)!
-      (mapbacktrace (lambda (_evald func args _flags)
-                      (if skip
-                          (setq skip nil)
-                        (message "  %S" (cons func args))))
-                    'debug)))
-   (t
-    (unless noninteractive
-      (message "Entering debugger..."))
-    (let (debugger-value
-	  (debugger-previous-state
-           (if (get-buffer "*Backtrace*")
-               (with-current-buffer (get-buffer "*Backtrace*")
-                 (debugger--save-buffer-state))))
-          (debugger-args args)
-	  (debugger-buffer (get-buffer-create "*Backtrace*"))
-	  (debugger-old-buffer (current-buffer))
-	  (debugger-window nil)
-	  (debugger-step-after-exit nil)
-          (debugger-will-be-back nil)
-	  ;; Don't keep reading from an executing kbd macro!
-	  (executing-kbd-macro nil)
-	  ;; Save the outer values of these vars for the `e' command
-	  ;; before we replace the values.
-	  (debugger-outer-match-data (match-data))
-	  (debugger-with-timeout-suspend (with-timeout-suspend)))
-      ;; Set this instead of binding it, so that `q'
-      ;; will not restore it.
-      (setq overriding-terminal-local-map nil)
-      ;; Don't let these magic variables affect the debugger itself.
-      (let ((last-command nil) this-command track-mouse
-	    (inhibit-trace t)
-	    unread-command-events
-	    unread-post-input-method-events
-	    last-input-event last-command-event last-nonmenu-event
-	    last-event-frame
-	    overriding-local-map
-	    load-read-function
-	    ;; If we are inside a minibuffer, allow nesting
-	    ;; so that we don't get an error from the `e' command.
-	    (enable-recursive-minibuffers
-	     (or enable-recursive-minibuffers (> (minibuffer-depth) 0)))
-	    (standard-input t) (standard-output t)
-	    inhibit-redisplay
-	    (cursor-in-echo-area nil)
-	    (window-configuration (current-window-configuration)))
-	(unwind-protect
-	    (save-excursion
-	      (when (eq (car debugger-args) 'debug)
-		;; Skip the frames for backtrace-debug, byte-code,
-		;; debug--implement-debug-on-entry and the advice's `apply'.
-		(backtrace-debug 4 t)
-		;; Place an extra debug-on-exit for macro's.
-		(when (eq 'lambda (car-safe (cadr (backtrace-frame 4))))
-		  (backtrace-debug 5 t)))
-              (with-current-buffer debugger-buffer
-                (unless (derived-mode-p 'debugger-mode)
-	          (debugger-mode))
-	        (debugger-setup-buffer debugger-args)
-	        (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))
-		  (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))
-	      (if (eq debugger-previous-window debugger-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.
-	    (setq debugger-previous-window-height
-		  (window-total-height debugger-window)))
-	  (if debugger-will-be-back
-	      ;; Restore previous window configuration (Bug#12623).
-	      (set-window-configuration window-configuration)
+  (if inhibit-redisplay
+      ;; Don't really try to enter debugger within an eval from redisplay.
+      debugger-value
+    (let ((only-backtrace (or noninteractive
+                              ;; If 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.
+                              (and (eq t (framep (selected-frame)))
+                                   (equal "initial_terminal" (terminal-name)))))
+          ;; Don't let `inhibit-message' get in our way (especially important if
+          ;; `only-backtrace' evaluated to a non-nil value.
+          (inhibit-message nil))
+      (unless only-backtrace
+        (message "Entering debugger..."))
+      (let (debugger-value
+	    (debugger-previous-state
+             (if (get-buffer "*Backtrace*")
+                 (with-current-buffer (get-buffer "*Backtrace*")
+                   (debugger--save-buffer-state))))
+            (debugger-args args)
+	    (debugger-buffer (get-buffer-create "*Backtrace*"))
+	    (debugger-old-buffer (current-buffer))
+	    (debugger-window nil)
+	    (debugger-step-after-exit nil)
+            (debugger-will-be-back nil)
+	    ;; Don't keep reading from an executing kbd macro!
+	    (executing-kbd-macro nil)
+	    ;; Save the outer values of these vars for the `e' command
+	    ;; before we replace the values.
+	    (debugger-outer-match-data (match-data))
+	    (debugger-with-timeout-suspend (with-timeout-suspend)))
+        ;; Set this instead of binding it, so that `q'
+        ;; will not restore it.
+        (setq overriding-terminal-local-map nil)
+        ;; Don't let these magic variables affect the debugger itself.
+        (let ((last-command nil) this-command track-mouse
+	      (inhibit-trace t)
+	      unread-command-events
+	      unread-post-input-method-events
+	      last-input-event last-command-event last-nonmenu-event
+	      last-event-frame
+	      overriding-local-map
+	      load-read-function
+	      ;; If we are inside a minibuffer, allow nesting
+	      ;; so that we don't get an error from the `e' command.
+	      (enable-recursive-minibuffers
+	       (or enable-recursive-minibuffers (> (minibuffer-depth) 0)))
+	      (standard-input t) (standard-output t)
+	      inhibit-redisplay
+	      (cursor-in-echo-area nil)
+	      (window-configuration (current-window-configuration)))
+	  (unwind-protect
+	      (save-excursion
+	        (when (eq (car debugger-args) 'debug)
+		  ;; Skip the frames for backtrace-debug, byte-code,
+		  ;; debug--implement-debug-on-entry and the advice's `apply'.
+		  (backtrace-debug 4 t)
+		  ;; Place an extra debug-on-exit for macro's.
+		  (when (eq 'lambda (car-safe (cadr (backtrace-frame 4))))
+		    (backtrace-debug 5 t)))
+                (with-current-buffer debugger-buffer
+                  (unless (derived-mode-p 'debugger-mode)
+	            (debugger-mode))
+	          (debugger-setup-buffer debugger-args)
+	          (when only-backtrace
+		    ;; If the backtrace is long, save the beginning
+		    ;; and the end, but discard the middle.
+                    (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 2))
+		        (let ((middlestart (point)))
+		          (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))
+	        (if (eq debugger-previous-window debugger-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))
-	      (progn
-		;; Unshow debugger-buffer.
-		(quit-restore-window debugger-window debugger-bury-or-kill)
-		;; Restore current buffer (Bug#12502).
-		(set-buffer debugger-old-buffer)))
-            ;; Forget debugger window, it won't be back (Bug#17882).
-            (setq debugger-previous-window nil))
-          ;; Restore previous state of debugger-buffer in case we were
-          ;; in a recursive invocation of the debugger, otherwise just
-          ;; erase the buffer.
-	  (when (buffer-live-p debugger-buffer)
-	    (with-current-buffer debugger-buffer
-	      (if debugger-previous-state
-                  (debugger--restore-buffer-state debugger-previous-state)
-                (setq backtrace-insert-header-function nil)
-                (setq backtrace-frames nil)
-                (backtrace-print))))
-	  (with-timeout-unsuspend debugger-with-timeout-suspend)
-	  (set-match-data debugger-outer-match-data)))
-      (setq debug-on-next-call debugger-step-after-exit)
-      debugger-value))))
+	      ;; Record height of debugger window.
+	      (setq debugger-previous-window-height
+		    (window-total-height debugger-window)))
+	    (if debugger-will-be-back
+	        ;; Restore previous window configuration (Bug#12623).
+	        (set-window-configuration window-configuration)
+	      (when (and (window-live-p debugger-window)
+		         (eq (window-buffer debugger-window) debugger-buffer))
+	        (progn
+		  ;; Unshow debugger-buffer.
+		  (quit-restore-window debugger-window debugger-bury-or-kill)
+		  ;; Restore current buffer (Bug#12502).
+		  (set-buffer debugger-old-buffer)))
+              ;; Forget debugger window, it won't be back (Bug#17882).
+              (setq debugger-previous-window nil))
+            ;; Restore previous state of debugger-buffer in case we were
+            ;; in a recursive invocation of the debugger, otherwise just
+            ;; erase the buffer.
+	    (when (buffer-live-p debugger-buffer)
+	      (with-current-buffer debugger-buffer
+	        (if debugger-previous-state
+                    (debugger--restore-buffer-state debugger-previous-state)
+                  (setq backtrace-insert-header-function nil)
+                  (setq backtrace-frames nil)
+                  (backtrace-print))))
+	    (with-timeout-unsuspend debugger-with-timeout-suspend)
+	    (set-match-data debugger-outer-match-data)))
+        (setq debug-on-next-call debugger-step-after-exit)
+        debugger-value))))
 \f
 (defun debugger--print (obj &optional stream)
   (condition-case err
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-12 15:49       ` Paul Pogonyshev
@ 2020-01-13 19:23         ` Stefan Monnier
  2020-01-14 15:41           ` Eli Zaretskii
  2020-01-25 14:32           ` Paul Pogonyshev
  2020-01-27  3:55         ` Stefan Monnier
  1 sibling, 2 replies; 22+ messages in thread
From: Stefan Monnier @ 2020-01-13 19:23 UTC (permalink / raw)
  To: eliz; +Cc: Paul Pogonyshev, Emacs developers

Paul writes:
> Here is a proposed patch that unifies the two print-backtrace-and-quit
> cases (batch mode and the failsafe). The patch is large mostly because
> of required reindenting, in fact only 15-20 lines are changed.

Looks good to me, thank you for doing it.
Eli, do you think this can go into `emacs-27`?

> I tested that it works as expected in batch mode, but don't know how to
> test the failsafe, I never did this.

Create a dummy ~/.emacs.d/early-init.el where you set `debug-on-error`
and then signal an error.

> Please test yourself.

Seems to work fine in my test, thank you.

> I don't have access to Emacs repository, so I cannot apply it myself.

[ Anything we can do to help with that?  ]

> I can only write emails and hope that someone applies the patches or
> otherwise does something about the problem.

I'll be happy to install as soon as Eli tells me where.


        Stefan




^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-13 19:23         ` Stefan Monnier
@ 2020-01-14 15:41           ` Eli Zaretskii
  2020-01-14 17:51             ` Paul Pogonyshev
  2020-01-14 20:30             ` Stefan Monnier
  2020-01-25 14:32           ` Paul Pogonyshev
  1 sibling, 2 replies; 22+ messages in thread
From: Eli Zaretskii @ 2020-01-14 15:41 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: pogonyshev, emacs-devel

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: Paul Pogonyshev <pogonyshev@gmail.com>, Emacs developers
>  <emacs-devel@gnu.org>
> Date: Mon, 13 Jan 2020 14:23:09 -0500
> 
> Paul writes:
> > Here is a proposed patch that unifies the two print-backtrace-and-quit
> > cases (batch mode and the failsafe). The patch is large mostly because
> > of required reindenting, in fact only 15-20 lines are changed.
> 
> Looks good to me, thank you for doing it.
> Eli, do you think this can go into `emacs-27`?

Yes, I think so.  But I have a question and a request:

> +    (let ((only-backtrace (or noninteractive
> +                              ;; If 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.
> +                              (and (eq t (framep (selected-frame)))
> +                                   (equal "initial_terminal" (terminal-name)))))

Paul said earlier that the latter condition, which tests
terminal-name, is always correct in batch mode.  If that is indeed so,
then why do we need to test noninteractive as well? it's redundant,
no?

And the request is to add a comment explaining the semantics of
only-backtrace.  Not how it is set -- this is clear from the code, --
but what does it mean in terms of the code after that which uses the
value.  Because I don't think the name is descriptive enough, and the
value is tested more than once below.

Btw, I'd be much happier if the condition didn't rely on low-level
implementation details such as the actual name of the initial
terminal, nor on when exactly during startup that terminal gets
deleted.  I think it would be much cleaner to set a variable at the
right place in startup.el (AFAIU, after we call frame-initialize), and
test it in debug.el.  I realize that this condition was copied from
the code we already had in debug.el, but maybe on master we should use
a cleaner solution.

Thanks.

P.S. One other situation where this should be tested is in the daemon
mode.



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-14 15:41           ` Eli Zaretskii
@ 2020-01-14 17:51             ` Paul Pogonyshev
  2020-01-14 19:57               ` Eli Zaretskii
  2020-01-14 20:30             ` Stefan Monnier
  1 sibling, 1 reply; 22+ messages in thread
From: Paul Pogonyshev @ 2020-01-14 17:51 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Stefan Monnier, Emacs developers

> Paul said earlier that the latter condition, which tests
> terminal-name, is always correct in batch mode.  If that is indeed so,
> then why do we need to test noninteractive as well? it's redundant,
> no?

It is true, but it feels sort of a side-effect to me. You even say
yourself later that you don't like the condition as it goes into
low-level internals. It is extremely non-obvious that it is also true
in non-interactive mode. I think it is better to explicitly have `(or
noninteractive' rather than rely on it implicitly be a subcase of the
second `or' operand (and forget it was meant to be when the second
condition is refactored).

> And the request is to add a comment explaining the semantics of
> only-backtrace.  Not how it is set -- this is clear from the code, --
> but what does it mean in terms of the code after that which uses the
> value.

How about this?

    ;; When operating without any user interaction, we are going to
print current
    ;; backtrace and kill Emacs, because there is no way to accept
debugging commands.

Paul

On Tue, 14 Jan 2020 at 16:41, Eli Zaretskii <eliz@gnu.org> wrote:
>
> > From: Stefan Monnier <monnier@iro.umontreal.ca>
> > Cc: Paul Pogonyshev <pogonyshev@gmail.com>, Emacs developers
> >  <emacs-devel@gnu.org>
> > Date: Mon, 13 Jan 2020 14:23:09 -0500
> >
> > Paul writes:
> > > Here is a proposed patch that unifies the two print-backtrace-and-quit
> > > cases (batch mode and the failsafe). The patch is large mostly because
> > > of required reindenting, in fact only 15-20 lines are changed.
> >
> > Looks good to me, thank you for doing it.
> > Eli, do you think this can go into `emacs-27`?
>
> Yes, I think so.  But I have a question and a request:
>
> > +    (let ((only-backtrace (or noninteractive
> > +                              ;; If 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.
> > +                              (and (eq t (framep (selected-frame)))
> > +                                   (equal "initial_terminal" (terminal-name)))))
>
> Paul said earlier that the latter condition, which tests
> terminal-name, is always correct in batch mode.  If that is indeed so,
> then why do we need to test noninteractive as well? it's redundant,
> no?
>
> And the request is to add a comment explaining the semantics of
> only-backtrace.  Not how it is set -- this is clear from the code, --
> but what does it mean in terms of the code after that which uses the
> value.  Because I don't think the name is descriptive enough, and the
> value is tested more than once below.
>
> Btw, I'd be much happier if the condition didn't rely on low-level
> implementation details such as the actual name of the initial
> terminal, nor on when exactly during startup that terminal gets
> deleted.  I think it would be much cleaner to set a variable at the
> right place in startup.el (AFAIU, after we call frame-initialize), and
> test it in debug.el.  I realize that this condition was copied from
> the code we already had in debug.el, but maybe on master we should use
> a cleaner solution.
>
> Thanks.
>
> P.S. One other situation where this should be tested is in the daemon
> mode.



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-14 17:51             ` Paul Pogonyshev
@ 2020-01-14 19:57               ` Eli Zaretskii
  0 siblings, 0 replies; 22+ messages in thread
From: Eli Zaretskii @ 2020-01-14 19:57 UTC (permalink / raw)
  To: Paul Pogonyshev; +Cc: monnier, emacs-devel

> From: Paul Pogonyshev <pogonyshev@gmail.com>
> Date: Tue, 14 Jan 2020 18:51:31 +0100
> Cc: Stefan Monnier <monnier@iro.umontreal.ca>, Emacs developers <emacs-devel@gnu.org>
> 
> > Paul said earlier that the latter condition, which tests
> > terminal-name, is always correct in batch mode.  If that is indeed so,
> > then why do we need to test noninteractive as well? it's redundant,
> > no?
> 
> It is true, but it feels sort of a side-effect to me. You even say
> yourself later that you don't like the condition as it goes into
> low-level internals. It is extremely non-obvious that it is also true
> in non-interactive mode.

It is as (un)obvious as the test against the name of the initial
terminal, because in batch mode we don't delete that terminal.

> I think it is better to explicitly have `(or noninteractive' rather
> than rely on it implicitly be a subcase of the second `or' operand
> (and forget it was meant to be when the second condition is
> refactored).

As I've said, I'd be okay with removing the test of the terminal name,
and using something much less subtle, but I hesitate to ask to do this
as part of the change on the released branch, since this "unclean"
test is already there.

> > And the request is to add a comment explaining the semantics of
> > only-backtrace.  Not how it is set -- this is clear from the code, --
> > but what does it mean in terms of the code after that which uses the
> > value.
> 
> How about this?
> 
>     ;; When operating without any user interaction, we are going to
> print current
>     ;; backtrace and kill Emacs, because there is no way to accept
> debugging commands.

Fine with me, but maybe for even more clarity, mention what we do in
addition in the case where user interaction is possible, so that the
last part of that sentence is more self-explanatory.

Thanks.



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-14 15:41           ` Eli Zaretskii
  2020-01-14 17:51             ` Paul Pogonyshev
@ 2020-01-14 20:30             ` Stefan Monnier
  2020-01-15 15:58               ` Eli Zaretskii
  1 sibling, 1 reply; 22+ messages in thread
From: Stefan Monnier @ 2020-01-14 20:30 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: pogonyshev, emacs-devel

> Paul said earlier that the latter condition, which tests
> terminal-name, is always correct in batch mode.  If that is indeed so,
> then why do we need to test noninteractive as well? it's redundant,
> no?

Indeed, it is.

> And the request is to add a comment explaining the semantics of
> only-backtrace.  Not how it is set -- this is clear from the code, --
> but what does it mean in terms of the code after that which uses the
> value.  Because I don't think the name is descriptive enough, and the
> value is tested more than once below.

Agreed.

> Btw, I'd be much happier if the condition didn't rely on low-level
> implementation details such as the actual name of the initial
> terminal, nor on when exactly during startup that terminal gets
> deleted.  I think it would be much cleaner to set a variable at the
> right place in startup.el (AFAIU, after we call frame-initialize), and
> test it in debug.el.  I realize that this condition was copied from
> the code we already had in debug.el, but maybe on master we should use
> a cleaner solution.

Setting a var wouldn't be right.  The test:

    (and (eq t (framep (selected-frame)))
         (equal "initial_terminal" (terminal-name)))

is fundamentally *right*: we want this special behavior when we're
operating in the special dummy(stdin/out) terminal because that terminal
does not offer the usual interaction expected by the normal backtrace
debugger.  So the `noninteractive` is an approximation (and is redundant
for that same reason) whereas the above test is really the correct one.
I agree that it is ugly because (framep (selected-frame)) returns `t`
both for "normal" tty frames/terminals as well as for the special
dummy terminal, so we need to depend on a special terminal name to
distinguish those two cases.

Maybe we can improve the code by introducing a function

    (defun terminal-dummy-p ()
      "Return non-nil if the current terminal is the special initial terminal.
    The \"initial\" terminal is the dummy-terminal used when we don't have
    a real terminal to use, such as is the case in batch mode, or while
    running early-init.el, or while starting the emacs-server."
      (and (eq t (framep (selected-frame)))
           (equal "initial_terminal" (terminal-name)))

and then use it there (and maybe we could then cleanup that function
so it doesn't need to rely on a special terminal name).


        Stefan




^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-14 20:30             ` Stefan Monnier
@ 2020-01-15 15:58               ` Eli Zaretskii
  2020-01-15 17:34                 ` Stefan Monnier
  0 siblings, 1 reply; 22+ messages in thread
From: Eli Zaretskii @ 2020-01-15 15:58 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: pogonyshev, emacs-devel

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: pogonyshev@gmail.com,  emacs-devel@gnu.org
> Date: Tue, 14 Jan 2020 15:30:24 -0500
> 
> > Btw, I'd be much happier if the condition didn't rely on low-level
> > implementation details such as the actual name of the initial
> > terminal, nor on when exactly during startup that terminal gets
> > deleted.  I think it would be much cleaner to set a variable at the
> > right place in startup.el (AFAIU, after we call frame-initialize), and
> > test it in debug.el.  I realize that this condition was copied from
> > the code we already had in debug.el, but maybe on master we should use
> > a cleaner solution.
> 
> Setting a var wouldn't be right.

Why not?

> The test:
> 
>     (and (eq t (framep (selected-frame)))
>          (equal "initial_terminal" (terminal-name)))
> 
> is fundamentally *right*

I didn't say it was wrong, I said it wasn't clean enough, IMO.  We
know exactly where in the startup process the interactive frame
becomes available: after the call to frame-initialize.  Why wouldn't
it be right to set a flag there which debug.el could test, instead of
testing the above?

> Maybe we can improve the code by introducing a function
> 
>     (defun terminal-dummy-p ()
>       "Return non-nil if the current terminal is the special initial terminal.
>     The \"initial\" terminal is the dummy-terminal used when we don't have
>     a real terminal to use, such as is the case in batch mode, or while
>     running early-init.el, or while starting the emacs-server."
>       (and (eq t (framep (selected-frame)))
>            (equal "initial_terminal" (terminal-name)))
> 
> and then use it there (and maybe we could then cleanup that function
> so it doesn't need to rely on a special terminal name).

Even with such a function, my question above still stands.

But anyway, there's no need to wait with installing this on emacs-27
until we end discussing how to make the test cleaner.  The cleanup
should go to master in any case.



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-15 15:58               ` Eli Zaretskii
@ 2020-01-15 17:34                 ` Stefan Monnier
  2020-01-15 17:54                   ` Eli Zaretskii
  0 siblings, 1 reply; 22+ messages in thread
From: Stefan Monnier @ 2020-01-15 17:34 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: pogonyshev, emacs-devel

> I didn't say it was wrong, I said it wasn't clean enough, IMO.  We
> know exactly where in the startup process the interactive frame
> becomes available: after the call to frame-initialize.  Why wouldn't
> it be right to set a flag there which debug.el could test, instead of
> testing the above?

If for some reason an interactive terminal is created but the
initial_terminal is still used (and is still the currently selected
terminal), we'd then have to tweak debug.el to make sure that it does
use the interactive terminal rather than the dummy one.

Also, what about an emacs-daemon in which an interactive frame has been
created in the past but has been deleted since?

Maybe a cleaner option than the one I suggested would be:

    (defun frame-get-interactive ()
      "Return a frame which supports interaction.
    All tty and GUI frames qualify, but not the frames on the \"initial\" terminal
    which is the dummy-terminal used when we don't have a real terminal to use,
    such as is the case in batch mode, or while running early-init.el, or while
    starting the emacs-server."
      (if (not (and (eq t (framep (selected-frame)))
                    (equal "initial_terminal" (terminal-name))))
          (selected-frame)
        (dolist (frame (frame-list))
          ...)))


-- Stefan




^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-15 17:34                 ` Stefan Monnier
@ 2020-01-15 17:54                   ` Eli Zaretskii
  2020-01-15 18:59                     ` Stefan Monnier
  0 siblings, 1 reply; 22+ messages in thread
From: Eli Zaretskii @ 2020-01-15 17:54 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: pogonyshev, emacs-devel

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: pogonyshev@gmail.com,  emacs-devel@gnu.org
> Date: Wed, 15 Jan 2020 12:34:44 -0500
> 
> > I didn't say it was wrong, I said it wasn't clean enough, IMO.  We
> > know exactly where in the startup process the interactive frame
> > becomes available: after the call to frame-initialize.  Why wouldn't
> > it be right to set a flag there which debug.el could test, instead of
> > testing the above?
> 
> If for some reason an interactive terminal is created but the
> initial_terminal is still used (and is still the currently selected
> terminal)

How can this happen?  The code which creates the interactive terminal
immediately proceeds to delete the initial one.

> Also, what about an emacs-daemon in which an interactive frame has been
> created in the past but has been deleted since?

What does the code do now in the daemon?  That was one of the
questions I asked before.

Anyway, with the variable I propose, we can reset it again (e.g., in
server.el) once there's no interactive frames.

But I don't want to argue about this any further, it doesn't seem to
be worth our time.



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-15 17:54                   ` Eli Zaretskii
@ 2020-01-15 18:59                     ` Stefan Monnier
  0 siblings, 0 replies; 22+ messages in thread
From: Stefan Monnier @ 2020-01-15 18:59 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: pogonyshev, emacs-devel

> Anyway, with the variable I propose, we can reset it again (e.g., in
> server.el) once there's no interactive frames.
>
> But I don't want to argue about this any further, it doesn't seem to
> be worth our time.

I don't see the point of the variable, really.  The question at hand is
"will the *Backtrace* buffer be usable" and this depends on the current
terminal where it will be "displayed", so the best way to determine the
course of action is to look at the terminal, I think, rather than to
duplicate this info in a variable which then needs to be updated
everytime the situation changes.

We should provide a less ad-hoc way to check whether a given terminal is
dummy, but other than that, I think the current solution is better than
going through a variable.


        Stefan




^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-13 19:23         ` Stefan Monnier
  2020-01-14 15:41           ` Eli Zaretskii
@ 2020-01-25 14:32           ` Paul Pogonyshev
  2020-01-28  2:52             ` Richard Stallman
  1 sibling, 1 reply; 22+ messages in thread
From: Paul Pogonyshev @ 2020-01-25 14:32 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Eli Zaretskii, Emacs developers

> > I don't have access to Emacs repository, so I cannot apply it myself.
>
> [ Anything we can do to help with that?  ]

I wrote that as a reminder, because it sometimes looks like people
give approvement to my patches and then nothing happens, as if they
expect me to somehow apply them, which I have no way of doing.

This time it has been 10 days since the last email in this thread, but
I see no change in the source repository. Maybe the patch got
forgotten? Or if you wait for something additional from me, please say
so explicitly.

Paul



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-12 15:49       ` Paul Pogonyshev
  2020-01-13 19:23         ` Stefan Monnier
@ 2020-01-27  3:55         ` Stefan Monnier
  2020-01-29 11:09           ` Paul Pogonyshev
  1 sibling, 1 reply; 22+ messages in thread
From: Stefan Monnier @ 2020-01-27  3:55 UTC (permalink / raw)
  To: Paul Pogonyshev; +Cc: Emacs developers

> Here is a proposed patch that unifies the two print-backtrace-and-quit
> cases (batch mode and the failsafe).

Thanks, installed,


        Stefan




^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-25 14:32           ` Paul Pogonyshev
@ 2020-01-28  2:52             ` Richard Stallman
  0 siblings, 0 replies; 22+ messages in thread
From: Richard Stallman @ 2020-01-28  2:52 UTC (permalink / raw)
  To: Paul Pogonyshev; +Cc: eliz, monnier, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > I wrote that as a reminder, because it sometimes looks like people
  > give approvement to my patches and then nothing happens, as if they
  > expect me to somehow apply them, which I have no way of doing.

It's entirely proper to ping us when it looks like something has fallen
off the table.  Each of us is imperfect.  Reminding each other helps us
become reliable.

Happy hacking.


-- 
Dr Richard Stallman
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-27  3:55         ` Stefan Monnier
@ 2020-01-29 11:09           ` Paul Pogonyshev
  2020-01-31 14:14             ` Eli Zaretskii
  0 siblings, 1 reply; 22+ messages in thread
From: Paul Pogonyshev @ 2020-01-29 11:09 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Emacs developers

[-- Attachment #1: Type: text/plain, Size: 525 bytes --]

> > Here is a proposed patch that unifies the two print-backtrace-and-quit
> > cases (batch mode and the failsafe).
>
> Thanks, installed,

Didn't we agree together with Eli Zaretskii to install this to emacs-27
branch? As far as I can see, it is currently only in master.

Paul


On Mon, 27 Jan 2020 at 04:55, Stefan Monnier <monnier@iro.umontreal.ca>
wrote:

> > Here is a proposed patch that unifies the two print-backtrace-and-quit
> > cases (batch mode and the failsafe).
>
> Thanks, installed,
>
>
>         Stefan
>
>

[-- Attachment #2: Type: text/html, Size: 1011 bytes --]

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-29 11:09           ` Paul Pogonyshev
@ 2020-01-31 14:14             ` Eli Zaretskii
  2020-01-31 18:10               ` Paul Pogonyshev
  0 siblings, 1 reply; 22+ messages in thread
From: Eli Zaretskii @ 2020-01-31 14:14 UTC (permalink / raw)
  To: Paul Pogonyshev; +Cc: monnier, emacs-devel

> From: Paul Pogonyshev <pogonyshev@gmail.com>
> Date: Wed, 29 Jan 2020 12:09:53 +0100
> Cc: Emacs developers <emacs-devel@gnu.org>
> 
> > Thanks, installed,
> 
> Didn't we agree together with Eli Zaretskii to install this to emacs-27
> branch? As far as I can see, it is currently only in master.

I've now cherry-picked this to the emacs-27 branch.

Thanks.



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Backtrace printing in batch mode ignores all customizations
  2020-01-31 14:14             ` Eli Zaretskii
@ 2020-01-31 18:10               ` Paul Pogonyshev
  0 siblings, 0 replies; 22+ messages in thread
From: Paul Pogonyshev @ 2020-01-31 18:10 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Stefan Monnier, Emacs developers

[-- Attachment #1: Type: text/plain, Size: 522 bytes --]

> I've now cherry-picked this to the emacs-27 branch.

Thank you.

Paul

On Fri, 31 Jan 2020 at 15:14, Eli Zaretskii <eliz@gnu.org> wrote:

> > From: Paul Pogonyshev <pogonyshev@gmail.com>
> > Date: Wed, 29 Jan 2020 12:09:53 +0100
> > Cc: Emacs developers <emacs-devel@gnu.org>
> >
> > > Thanks, installed,
> >
> > Didn't we agree together with Eli Zaretskii to install this to emacs-27
> > branch? As far as I can see, it is currently only in master.
>
> I've now cherry-picked this to the emacs-27 branch.
>
> Thanks.
>

[-- Attachment #2: Type: text/html, Size: 1049 bytes --]

^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2020-01-31 18:10 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-16 22:34 Backtrace printing in batch mode ignores all customizations Paul Pogonyshev
2019-12-21  9:22 ` Eli Zaretskii
2019-12-21 17:07   ` Paul Pogonyshev
2020-01-04 22:44 ` Stefan Monnier
2020-01-04 23:12   ` Paul Pogonyshev
2020-01-04 23:31     ` Stefan Monnier
2020-01-12 15:49       ` Paul Pogonyshev
2020-01-13 19:23         ` Stefan Monnier
2020-01-14 15:41           ` Eli Zaretskii
2020-01-14 17:51             ` Paul Pogonyshev
2020-01-14 19:57               ` Eli Zaretskii
2020-01-14 20:30             ` Stefan Monnier
2020-01-15 15:58               ` Eli Zaretskii
2020-01-15 17:34                 ` Stefan Monnier
2020-01-15 17:54                   ` Eli Zaretskii
2020-01-15 18:59                     ` Stefan Monnier
2020-01-25 14:32           ` Paul Pogonyshev
2020-01-28  2:52             ` Richard Stallman
2020-01-27  3:55         ` Stefan Monnier
2020-01-29 11:09           ` Paul Pogonyshev
2020-01-31 14:14             ` Eli Zaretskii
2020-01-31 18:10               ` Paul Pogonyshev

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).