Subject: bug#63253: 29.0.90; with-delayed-message fails in combination with inhibit-message

From: Eli Zaretskii <[email-masked]>
Date: Wed, 10 May 2023 14:16:36 +0300

> From: Stefan Monnier <[email-masked]>
> Cc: Lars Ingebrigtsen <[email-masked]>,  [email-masked],
>   [email-masked]
> Date: Tue, 09 May 2023 22:31:09 -0400
> 
> > Thanks, I think you should install this on the emacs-29 branch.  And I
> > think a similar change is needed in clear_message, so it doesn't call
> > clear-message-function.
> 
> OK, done.

Thanks.

> > But what does this mean for with-delayed-message and
> > funcall-with-delayed-message?  These were introduced in Emacs 29, but
> > if we say that atimers cannot be used to safely run arbitrary Lisp,
> > then we should somehow make them safer, perhaps by having in
> > with_delayed_message_display a subset of code message3, without the
> > calls to Lisp.  WDYT?
> 
> The code already falls back to a default behavior of displaying the
> message in the echo area when calls to ELisp can't be used.

You mean, the changes that you just installed?  If so, that is AFAIU
conditioned on garbage_collection_inhibited, which doesn't necessarily
disable Lisp calls from delayed messages in all situations.  Plus, we
might at some point decide that garbage_collection_inhibited is not
necessary in probably_quit.

What I meant was to completely disable customizing
set-message-function for delayed messages.  We don't have to support
that, and the fact that we call 'message' is just an implementation
detail.  If nothing else, this will make the effect on delayed
messages consistent no matter when and how they are actually
displayed.