In batch mode, avoid killing Emacs with C-g in the minibuffer

* src/keyboard.c (Fcommand_error_default_function): Don't kill emacs
when handling the minibuffer-quit condition (bug#48603).
This commit is contained in:
Miha Rihtaršič 2021-09-01 10:10:44 +02:00 committed by Lars Ingebrigtsen
parent a0be0cdbd2
commit 45793b195c

View file

@ -1009,13 +1009,16 @@ Default value of `command-error-function'. */)
(Lisp_Object data, Lisp_Object context, Lisp_Object signal)
{
struct frame *sf = SELECTED_FRAME ();
Lisp_Object conditions;
Lisp_Object conditions = Fget (XCAR (data), Qerror_conditions);
int is_minibuffer_quit = !NILP (Fmemq (Qminibuffer_quit, conditions));
CHECK_STRING (context);
/* If the window system or terminal frame hasn't been initialized
yet, or we're not interactive, write the message to stderr and exit. */
if (!sf->glyphs_initialized_p
yet, or we're not interactive, write the message to stderr and exit.
Don't do this for the minibuffer-quit condition. */
if (!is_minibuffer_quit
&& (!sf->glyphs_initialized_p
/* The initial frame is a special non-displaying frame. It
will be current in daemon mode when there are no frames
to display, and in non-daemon mode before the real frame
@ -1027,7 +1030,7 @@ Default value of `command-error-function'. */)
from being created, so continuing as normal is better in
that case. */
|| (!IS_DAEMON && FRAME_INITIAL_P (sf))
|| noninteractive)
|| noninteractive))
{
print_error_message (data, Qexternal_debugging_output,
SSDATA (context), signal);
@ -1036,12 +1039,10 @@ Default value of `command-error-function'. */)
}
else
{
conditions = Fget (XCAR (data), Qerror_conditions);
clear_message (1, 0);
message_log_maybe_newline ();
if (!NILP (Fmemq (Qminibuffer_quit, conditions)))
if (is_minibuffer_quit)
{
Fding (Qt);
}