Subject: bug#38264: 27.0.50; Emacs terminates unexpectedly when noninteractive is t

From: Eli Zaretskii <[email-masked]>
Date: Wed, 20 Nov 2019 17:59:28 +0200

> From: Ihor Radchenko <[email-masked]>
> Cc: [email-masked]
> Date: Wed, 20 Nov 2019 00:57:18 +0800
> 
> > This is a feature: in non-interactive mode entering a debugger
> > displays the backtrace and then kills Emacs.
> 
> It indeed makes sense. However, it does not make sense when
> noninteractive is manually set to 't in normal interactive mode.

How can Emacs distinguish between these two situations?  The value of
'noninteractive' is how it knows whether the session is an interactive
one, and your code steps on it.

> Note that package.el, for example, can set noninteractive to 't at some 
> point (see package-generate-autoloads), even if emacs is otherwise
> interactive. 
> 
> > Why are you binding noninteractive to t while debug-on-error is
> > enabled?
> 
> Similar to package.el, straight.el also binds noninteractive to 't when
> generating autoloads.

What package.el does makes little sense to me, see below.  Does
straight.el have a reason to do the same, you did you just copy the
code from package.el?

If the code in straight.el is simply a copy from package.el, then just
remove the line which binds 'noninteractive'.  You don't need it
because all it does is disable calls to 'message' inside
'autoload-generate-file-autoloads', and you already bind
'inhibit-message' to t, so no messages will be displayed anyway.

Artur, I think for the same reason we have no need to bind
'noninteractive' in 'package-generate-autoloads', or am I missing
something?

Btw, the other places in package.el which use 'inhibit-message' to
bind 'save-silently' to a non-nil value seem also redundant, since if
'inhibit-message' is non-nil, its effect is a superset of what
'save-silently' does anyway.  WDYT?