GNU bug report logs - #78737
sit-for behavior changes when byte-compiled

Previous Next

Package: emacs;

Reported by: Daniel Colascione <dancol <at> dancol.org>

Date: Mon, 9 Jun 2025 20:50:02 UTC

Severity: normal

Full log


Message #158 received at 78737 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Daniel Colascione <dancol <at> dancol.org>
Cc: 78737 <at> debbugs.gnu.org, pipcet <at> protonmail.com, monnier <at> iro.umontreal.ca
Subject: Re: bug#78737: sit-for behavior changes when byte-compiled
Date: Fri, 13 Jun 2025 14:36:42 +0300
> From: Daniel Colascione <dancol <at> dancol.org>
> Cc: Pip Cet <pipcet <at> protonmail.com>,  monnier <at> iro.umontreal.ca,
>   78737 <at> debbugs.gnu.org
> Date: Fri, 13 Jun 2025 00:53:38 -0700
> 
> > If you are talking about a GUI session, then IME the 'emergency exit"
> > procedure isn't reliably working in that case, and I'm not sure the
> > implementation intends to support that.  I always knew that it's only
> > reliably working on TTY frames.
> >
> > Or are you talking about the effect of the changes on the branch?
> 
> FWIW, the purpose of my N-times-in-T-milliseconds-within-one-command
> formulation of emergency exit is to get the mechanism working reliably
> in all cases.
> 
> I can definitely type 4-5 C-gs in a GUI Emacs (well, NS, but I recall
> PGTK being similar?) and not have Emacs quit.  If I mash C-g, it
> sometimes does, and sometimes doesn't.
> 
> Right now, the logic is this:
> 
>     {
>       /* Request quit when it's safe.  */
>       int count = NILP (Vquit_flag) ? 1 : force_quit_count + 1;
>       force_quit_count = count;
>       if (count == 3)
> 	Vinhibit_quit = Qnil;
>       Vquit_flag = Qt;
>     }
> 
> IOW, the first quit after clearing Vquit_flag resets the count to one.
> Maybe that's why it isn't working reliably right now.  If we reformulate
> this mechanism not in terms of count == 3 (which is fiddly for all sorts
> of reasons, since Vquit_flag can get reset) but in terms of the UX
> directly --- N recent quits in T time in a single command --- we make
> the whole thing more reliable.
> 
> If you set T=infinity and N=3, you get the current force quit UX (modulo
> my upgrade-before-disabling-inhibit-quit thing), just more reliably, and
> you can break out of arbitrary Lisp code.

I suggest to leave the emergency exit feature alone for now, and focus
on the interruptibility of Lisp programs.  They are not independent,
but the emergency exit is a separate feature, so mixing these two
discussions makes the argument less effective.  We can return to the
emergency exit later.




This bug report was last modified 4 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.