Received: (at 81619) by debbugs.gnu.org; 29 Aug 2026 11:16:18 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sat Aug 29 07:16:18 2026 Received: from localhost ([127.0.0.1]:55101 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1x0H2n-0004SI-To for submit <at> debbugs.gnu.org; Sat, 29 Aug 2026 07:16:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41920) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1x0H2k-0004Qy-Gf for 81619 <at> debbugs.gnu.org; Sat, 29 Aug 2026 07:16:16 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1x0H2e-000255-4K; Sat, 29 Aug 2026 07:16:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=wCAj7dwi1OB8zMITXy2OcOfvgHTMfJlt20KQ2Y+irmg=; b=qPyf030F96DN TlvqOs3OvKWgtmUNCwy43lEeQRuskmOptgWUfH2WBIreIGNnfGJd6+Pq8AyjERqxijGs5zrAlDjTn 6SzZ/NpV88jR2MPoztdNS0BoAt+gejsFUvSTf0u5NQIF4uV8b1EUAUHOzo9QXWqZscqxMepXqHou1 z07t17sHVLLwXVKsNhciaiUYDDekraynO9xhZrAQXSNF/FrKj+ct/SyOpAzAn7OhK2OOgwtWKeX5M W6x7HhzaOfh/M+wxH2f0b7w6nuEJCd5WPWy5Zw+CaloW4wU8Xe0TPAHnxNm1KZMGH5R31c0ifcI17 XpXH3QozL52yVAOrKVoBNw==; Date: Sat, 29 Aug 2026 14:16:03 +0300 Message-Id: <8633vxb2j0.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Alan Third <alan@HIDDEN> In-Reply-To: <apK-kBmVOb3rIMRl@HIDDEN> (message from Alan Third on Sat, 29 Aug 2026 12:12:16 +0100) Subject: Re: bug#81619: 30.1; draggingUpdated callback in nsterm.m invokes redisplay with waiting_for_input set, aborting Emacs References: <m0qzk1nuqp.fsf_-_@HIDDEN> <865x1b7934.fsf@HIDDEN> <86v78tb66u.fsf@HIDDEN> <apK-kBmVOb3rIMRl@HIDDEN> X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 81619 Cc: richard.garner@HIDDEN, 81619 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.7 (-) > Date: Sat, 29 Aug 2026 12:12:16 +0100 > From: Alan Third <alan@HIDDEN> > Cc: richard.garner@HIDDEN, 81619 <at> debbugs.gnu.org > > On Sat, Aug 29, 2026 at 12:56:57PM +0300, Eli Zaretskii wrote: > > Ping! Alan, could you please respond with comments, if any? > > Sorry. > > It looks like a reasonable approach to me. I think I'm responsible for > stealing the code from nsmenu the first time and it definitely seems > to do the trick. > > Patch attached. > > I'm not sure if the copyright exemption is required since I added > Richard as a co-author. There's no need, indeed. > Richard, can you please ensure this builds and works, as I don't have > simple access to a macOS machine to test right now?
bug-gnu-emacs@HIDDEN:bug#81619; Package emacs.
Full text available.
Received: (at 81619) by debbugs.gnu.org; 29 Aug 2026 11:12:27 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Aug 29 07:12:27 2026
Received: from localhost ([127.0.0.1]:55079 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1x0Gz4-0003zH-S0
for submit <at> debbugs.gnu.org; Sat, 29 Aug 2026 07:12:27 -0400
Received: from dane.soverin.net ([185.233.34.36]:55683)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
(Exim 4.84_2) (envelope-from <alan@HIDDEN>) id 1x0Gz2-0003yT-O0
for 81619 <at> debbugs.gnu.org; Sat, 29 Aug 2026 07:12:25 -0400
Received: from smtp.soverin.net (unknown [10.10.4.100])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(No client certificate requested)
by dane.soverin.net (Postfix) with ESMTPS id 4hXCJf334nzlvC;
Sat, 29 Aug 2026 11:12:18 +0000 (UTC)
Received: from smtp.soverin.net (smtp.soverin.net [10.10.4.100]) by
soverin.net (Postfix) with ESMTPSA id 4hXCJd5Zz9z9j;
Sat, 29 Aug 2026 11:12:17 +0000 (UTC)
X-CM-Envelope: MS4xfGDMifB5jv5SxJX9jkWppO3n+JW19xVq9UQ1K16TLPt7lCRlOnLvc/VfwLyKqpbA2W2UI5XrIxJRet2PJlDmbVdz2Ykw/iDqm72OFk01auCTXcrwRyQZ
IGqTISLg42Q3dy7AO3Z3+hjOP5IXPCK/fivKKYAhzPE9xQFkTijeaOaTz5GxC+X+vT+wcipM81qebMRMKh2W/zKCl7JpPg5+P5TyCKXal0APbH/3X6JVhvFU
MFxpsirc0/OV/uXcPKoX+Bsfc9m4ERAghsYJKw9Qx5mtzWBJLiyd99jmjYI4SAFY
X-Soverin-Id: 01a04d38-6a50-710a-8db9-245c50387955
Received: from localhost (namib [local])
by namib (OpenSMTPD) with ESMTPA id 0f72006b;
Sat, 29 Aug 2026 11:12:16 +0000 (UTC)
Date: Sat, 29 Aug 2026 12:12:16 +0100
From: Alan Third <alan@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#81619: 30.1; draggingUpdated callback in nsterm.m invokes
redisplay with waiting_for_input set, aborting Emacs
Message-ID: <apK-kBmVOb3rIMRl@HIDDEN>
Mail-Followup-To: Alan Third <alan@HIDDEN>,
Eli Zaretskii <eliz@HIDDEN>, richard.garner@HIDDEN,
81619 <at> debbugs.gnu.org
References: <m0qzk1nuqp.fsf_-_@HIDDEN> <865x1b7934.fsf@HIDDEN>
<86v78tb66u.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="277UK9op7xeoz7aI"
Content-Disposition: inline
In-Reply-To: <86v78tb66u.fsf@HIDDEN>
X-Spampanel-Class: ham
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 81619
Cc: richard.garner@HIDDEN, 81619 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)
--277UK9op7xeoz7aI
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
On Sat, Aug 29, 2026 at 12:56:57PM +0300, Eli Zaretskii wrote:
> Ping! Alan, could you please respond with comments, if any?
Sorry.
It looks like a reasonable approach to me. I think I'm responsible for
stealing the code from nsmenu the first time and it definitely seems
to do the trick.
Patch attached.
I'm not sure if the copyright exemption is required since I added
Richard as a co-author.
Richard, can you please ensure this builds and works, as I don't have
simple access to a macOS machine to test right now?
--
Alan Third
--277UK9op7xeoz7aI
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
filename=0001-Fix-crash-in-NS-port-bug-81619.patch
From bb01b2db4b79400f15c8796abfc92c85eca6e721 Mon Sep 17 00:00:00 2001
From: Alan Third <alan@HIDDEN>
Date: Sat, 29 Aug 2026 12:01:11 +0100
Subject: [PATCH] Fix crash in NS port (bug#81619)
* src/nsterm.m (ns_safe_redisplay): New function.
([EmacsView layoutSublayersOfLayer:]):
([EmacsView draggingUpdated:]): Use the new function above.
Co-authored-by: Richard Garner <richard.garner@HIDDEN>
Copyright-paperwork-exempt: yes
---
src/nsterm.m | 38 ++++++++++++++++++++++----------------
1 file changed, 22 insertions(+), 16 deletions(-)
diff --git a/src/nsterm.m b/src/nsterm.m
index 77ce7d94fc0..675679e754d 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -841,6 +841,26 @@ Free a pool and temporary objects it refers to (callable from C)
}
+/* Since redisplay can call arbitrary Lisp that may signal, we guard
+ against calling it while waiting_for_input is set, in which state any
+ signal causes an immediate abort.
+
+ Use of this function probably implies a deeper bug that's hard to
+ fix. */
+void
+ns_safe_redisplay ()
+{
+ bool owfi = waiting_for_input;
+ waiting_for_input = 0;
+ block_input ();
+
+ redisplay ();
+
+ unblock_input ();
+ waiting_for_input = owfi;
+}
+
+
/* ==========================================================================
Focus (clipping) and screen update
@@ -9393,21 +9413,7 @@ - (void)copyRect:(NSRect)srcRect to:(NSPoint)dest
- (void)layoutSublayersOfLayer:(CALayer *)layer
{
if (!redisplaying_p && FRAME_GARBAGED_P (emacsframe))
- {
- /* If there is IO going on when redisplay is run here Emacs
- crashes. I think it's because this code will always be run
- within the run loop and for whatever reason processing input
- is dangerous. This technique was stolen wholesale from
- nsmenu.m and seems to work. */
- bool owfi = waiting_for_input;
- waiting_for_input = 0;
- block_input ();
-
- redisplay ();
-
- unblock_input ();
- waiting_for_input = owfi;
- }
+ ns_safe_redisplay();
}
#endif
@@ -9511,7 +9517,7 @@ - (NSDragOperation) draggingUpdated: (id <NSDraggingInfo>) sender
safe_calln (Vns_drag_motion_function, frame,
make_fixnum (x), make_fixnum (y));
- redisplay ();
+ ns_safe_redisplay();
#endif
unbind_to (count, Qnil);
--
2.55.0
--277UK9op7xeoz7aI--
bug-gnu-emacs@HIDDEN:bug#81619; Package emacs.
Full text available.
Received: (at 81619) by debbugs.gnu.org; 29 Aug 2026 09:57:11 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Aug 29 05:57:11 2026
Received: from localhost ([127.0.0.1]:54817 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1x0FoE-0000ZB-3d
for submit <at> debbugs.gnu.org; Sat, 29 Aug 2026 05:57:11 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:40100)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1x0FoB-0000Y1-NF
for 81619 <at> debbugs.gnu.org; Sat, 29 Aug 2026 05:57:08 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
id 1x0Fo4-00034L-I2; Sat, 29 Aug 2026 05:57:00 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
mime-version; bh=tlVuWMt6XJhv8Q74skMBjH59dvjb6rDi47C0V1YRwC4=; b=UfYlpnEN3LdQ
mB1XcDsfEYQRuVNALw9KnaGO6Mi48eba4GvPZL0A69B8UTV4Pc54UuZsvXJfAhIRYf+aAHPgYEEF+
I4K40EVJ0NFlb6dq7ep3nazFk20inGYGyV9PhjHV5pxn41g4SRWRJeDLMRhViJ/EwVA1T1HwSF1Ej
GdPpGeFnjfO6WpYGnNLY0S0AWxFpSULVAJTWrQKwBtUF0BMCqxlCwrQ4yqw86fAUFkIrSaMeLiiWf
yAf/xhk9/bkMmOhYk0XYO2ffdTv0w6LSDSwpTOZzRtGIetZWKtXrolir4QiAvHJiTpJxJiji6Tx48
tJ6zWIyXLTLwlgpFaw1BhQ==;
Date: Sat, 29 Aug 2026 12:56:57 +0300
Message-Id: <86v78tb66u.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: alan@HIDDEN
In-Reply-To: <865x1b7934.fsf@HIDDEN> (message from Eli Zaretskii on Sat, 15
Aug 2026 17:27:11 +0300)
Subject: Re: bug#81619: 30.1;
draggingUpdated callback in nsterm.m invokes redisplay with
waiting_for_input set, aborting Emacs
References: <m0qzk1nuqp.fsf_-_@HIDDEN> <865x1b7934.fsf@HIDDEN>
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 81619
Cc: richard.garner@HIDDEN, 81619 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)
Ping! Alan, could you please respond with comments, if any?
> Cc: 81619 <at> debbugs.gnu.org
> Date: Sat, 15 Aug 2026 17:27:11 +0300
> From: Eli Zaretskii <eliz@HIDDEN>
>
> > From: Richard Garner <richard.garner@HIDDEN>
> > Date: Fri, 14 Aug 2026 15:58:18 +1000
> >
> >
> > The bug
> > -------
> >
> > Dragging a file over an Emacs frame on macOS sometimes causes an instant
> > Emacs abort, with no error message: Emacs simply disappears.
> >
> > This appears to be because the NS drag callback runs redisplay in a
> > fragile state where no Lisp signals are permitted.
> >
> > The analysis
> > ------------
> >
> > My macOS crash logs gave me this traceback:
> >
> > #8 emacs_abort
> > #9 signal_or_quit
> > #10 Fsignal
> > #13 args_out_of_range
> > #14 Faref
> > #15 truncate-string-to-width (mule-util, natively compiled)
> > #17 mu4e--modeline-quote-and-truncate
> > #19 mu4e--modeline-string
> > #23 internal_condition_case_n
> > #24 dsafe__call
> > #25 display_mode_element (x5)
> > #30 Fformat_mode_line
> > #40 internal_condition_case_n
> > #41 dsafe__call
> > #42 display_mode_element
> > #43 display_mode_line
> > #44 display_mode_lines
> > #45 redisplay_window
> > #48 redisplay_internal
> > #49 -[EmacsView draggingUpdated:]
> > #50 -[NSDragDestination _draggingUpdate]
> > #52 NSCoreDragTrackingProc
> >
> > Here you can see -[EmacsView draggingUpdated:] calling redisplay(); this
> > is nsterm.m:9494. Inside redisplay(), the modelines are updated,
> > including the elisp inside any :eval forms. In my config, one of these
> > calls truncate-string-to-width from mule-util.el. This iterates over a
> > string with aref inside a condition-case, and catches args-out-of-range
> > as the loop terminator.
> >
> > This is perfectly blameless (and stock) elisp, but here redisplay is
> > being called while Emacs is idling in wait_reading_process_output with
> > waiting_for_input set. In this state, any signal raised causes an
> > instant abort (eval.c:1961). Even a handled signal is not safe: the
> > condition-case in truncate-string-to-width is bypassed, as are
> > redisplay's own guards at frames #23 and #40. signal_or_quit aborts
> > without consulting any handlers, so Emacs vanishes without trace.
> >
> > Running Emacs through lldb, I think I can trace the mechanism:
> >
> > frame #18: Emacs`ns_select_1 + 784
> > frame #19: Emacs`wait_reading_process_output + 3312
> > frame #20: Emacs`sit_for + 384
> > frame #21: Emacs`read_char + 4884
> >
> > - read_char calls sit_for with reading = 1, from either the
> > echo-keystrokes wait or the auto-save idle wait;
> > - because reading = 1, sit_for passes read_kbd = -1;
> > - because read_kbd is negative, wait_reading_process_output calls
> > set_waiting_for_input.
> >
> > Nothing in nsterm.m or nsmenu.m clears it around the NS event loop, so
> > it is still set when AppKit calls into the view.
> >
> > The fix
> > -------
> >
> > This issue has already been worked around elsewhere. dnd.el:155-157
> > tries to do so from the elisp side with the comment "We avoid errors
> > here, since on some systems this runs when waiting_for_input is
> > non-zero, and that aborts on error."
> >
> > However, nsterm.m:9380-9389, a hundred lines earlier, has a fix that
> > works on the Objective C side; it says:
> >
> > "If there is IO going on when redisplay is run here Emacs crashes. I
> > think it's because this code will always be run within the run loop and
> > for whatever reason processing input is dangerous. This technique was
> > stolen wholesale from nsmenu.m and seems to work."
> >
> > The place it was stolen from is nsmenu.m:201-254; propagating the
> > wholesale theft further yields the following minimal patch against
> > master:
> >
> > --8<---------------cut here---------------start------------->8---
> > --- a/src/nsterm.m
> > +++ b/src/nsterm.m
> > @@ -9491,7 +9491,19 @@
> > safe_calln (Vns_drag_motion_function, frame,
> > make_fixnum (x), make_fixnum (y));
> >
> > - redisplay ();
> > + /* Since redisplay can call arbitrary Lisp that may signal, we
> > + guard against calling it while waiting_for_input is set, in
> > + which state any signal causes an immediate abort. */
> > + {
> > + bool owfi = waiting_for_input;
> > + waiting_for_input = 0;
> > + block_input ();
> > +
> > + redisplay ();
> > +
> > + unblock_input ();
> > + waiting_for_input = owfi;
> > + }
> > #endif
> >
> > unbind_to (count, Qnil);
> > --8<---------------cut here---------------end--------------->8---
> >
> > However, a manoeuvre that's good enough to steal twice maybe deserves
> > its own helper.
>
> Thanks.
>
> Alan, any comments?
>
>
>
>
bug-gnu-emacs@HIDDEN:bug#81619; Package emacs.
Full text available.
Received: (at 81619) by debbugs.gnu.org; 15 Aug 2026 14:27:30 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Aug 15 10:27:29 2026
Received: from localhost ([127.0.0.1]:41853 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1wvFM8-0005U1-My
for submit <at> debbugs.gnu.org; Sat, 15 Aug 2026 10:27:29 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:53430)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1wvFM4-0005RW-T1
for 81619 <at> debbugs.gnu.org; Sat, 15 Aug 2026 10:27:26 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
id 1wvFLx-0001OO-TV; Sat, 15 Aug 2026 10:27:17 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
mime-version; bh=FKwZVz6GGGMPhTigssU+Hpsva0ovuEQu7amWNRqB4rc=; b=V5h8F/a+ritH
hvOubxFcMlW1lrI8i8KslS+rwFNA6opwj0piggthDtGiR6jVCyllHTBGP+HRfDCUmXq7J7zDt4nDs
TgzrUhvu+Jp8wMovy/Ipk9KBzp7qfHQcJL1RrbCag37MqZP1LFpL77En519zkn8ES8Ir4rPBXryt2
szkGa9SlaWMEnV7S2iF3FFNZbnukERcpmE1AzH2e83mjnGMaSu+QmqYpMX4DmTV8aqVNB7aqCM8MK
AFyGFS/zNoklp8oN22CcvzkL0Slw+NgsePYOXLVUhn+n3OOrPi9unSo3aAmdLJ6xNSzCyjpK8SJ7t
DUa+jgzJ7Jn5W2NYO4/eEA==;
Date: Sat, 15 Aug 2026 17:27:11 +0300
Message-Id: <865x1b7934.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Richard Garner <richard.garner@HIDDEN>,
Alan Third <alan@HIDDEN>
In-Reply-To: <m0qzk1nuqp.fsf_-_@HIDDEN> (message from Richard Garner on
Fri, 14 Aug 2026 15:58:18 +1000)
Subject: Re: bug#81619: 30.1;
draggingUpdated callback in nsterm.m invokes redisplay with
waiting_for_input set, aborting Emacs
References: <m0qzk1nuqp.fsf_-_@HIDDEN>
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 81619
Cc: 81619 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)
> From: Richard Garner <richard.garner@HIDDEN>
> Date: Fri, 14 Aug 2026 15:58:18 +1000
>
>
> The bug
> -------
>
> Dragging a file over an Emacs frame on macOS sometimes causes an instant
> Emacs abort, with no error message: Emacs simply disappears.
>
> This appears to be because the NS drag callback runs redisplay in a
> fragile state where no Lisp signals are permitted.
>
> The analysis
> ------------
>
> My macOS crash logs gave me this traceback:
>
> #8 emacs_abort
> #9 signal_or_quit
> #10 Fsignal
> #13 args_out_of_range
> #14 Faref
> #15 truncate-string-to-width (mule-util, natively compiled)
> #17 mu4e--modeline-quote-and-truncate
> #19 mu4e--modeline-string
> #23 internal_condition_case_n
> #24 dsafe__call
> #25 display_mode_element (x5)
> #30 Fformat_mode_line
> #40 internal_condition_case_n
> #41 dsafe__call
> #42 display_mode_element
> #43 display_mode_line
> #44 display_mode_lines
> #45 redisplay_window
> #48 redisplay_internal
> #49 -[EmacsView draggingUpdated:]
> #50 -[NSDragDestination _draggingUpdate]
> #52 NSCoreDragTrackingProc
>
> Here you can see -[EmacsView draggingUpdated:] calling redisplay(); this
> is nsterm.m:9494. Inside redisplay(), the modelines are updated,
> including the elisp inside any :eval forms. In my config, one of these
> calls truncate-string-to-width from mule-util.el. This iterates over a
> string with aref inside a condition-case, and catches args-out-of-range
> as the loop terminator.
>
> This is perfectly blameless (and stock) elisp, but here redisplay is
> being called while Emacs is idling in wait_reading_process_output with
> waiting_for_input set. In this state, any signal raised causes an
> instant abort (eval.c:1961). Even a handled signal is not safe: the
> condition-case in truncate-string-to-width is bypassed, as are
> redisplay's own guards at frames #23 and #40. signal_or_quit aborts
> without consulting any handlers, so Emacs vanishes without trace.
>
> Running Emacs through lldb, I think I can trace the mechanism:
>
> frame #18: Emacs`ns_select_1 + 784
> frame #19: Emacs`wait_reading_process_output + 3312
> frame #20: Emacs`sit_for + 384
> frame #21: Emacs`read_char + 4884
>
> - read_char calls sit_for with reading = 1, from either the
> echo-keystrokes wait or the auto-save idle wait;
> - because reading = 1, sit_for passes read_kbd = -1;
> - because read_kbd is negative, wait_reading_process_output calls
> set_waiting_for_input.
>
> Nothing in nsterm.m or nsmenu.m clears it around the NS event loop, so
> it is still set when AppKit calls into the view.
>
> The fix
> -------
>
> This issue has already been worked around elsewhere. dnd.el:155-157
> tries to do so from the elisp side with the comment "We avoid errors
> here, since on some systems this runs when waiting_for_input is
> non-zero, and that aborts on error."
>
> However, nsterm.m:9380-9389, a hundred lines earlier, has a fix that
> works on the Objective C side; it says:
>
> "If there is IO going on when redisplay is run here Emacs crashes. I
> think it's because this code will always be run within the run loop and
> for whatever reason processing input is dangerous. This technique was
> stolen wholesale from nsmenu.m and seems to work."
>
> The place it was stolen from is nsmenu.m:201-254; propagating the
> wholesale theft further yields the following minimal patch against
> master:
>
> --8<---------------cut here---------------start------------->8---
> --- a/src/nsterm.m
> +++ b/src/nsterm.m
> @@ -9491,7 +9491,19 @@
> safe_calln (Vns_drag_motion_function, frame,
> make_fixnum (x), make_fixnum (y));
>
> - redisplay ();
> + /* Since redisplay can call arbitrary Lisp that may signal, we
> + guard against calling it while waiting_for_input is set, in
> + which state any signal causes an immediate abort. */
> + {
> + bool owfi = waiting_for_input;
> + waiting_for_input = 0;
> + block_input ();
> +
> + redisplay ();
> +
> + unblock_input ();
> + waiting_for_input = owfi;
> + }
> #endif
>
> unbind_to (count, Qnil);
> --8<---------------cut here---------------end--------------->8---
>
> However, a manoeuvre that's good enough to steal twice maybe deserves
> its own helper.
Thanks.
Alan, any comments?
bug-gnu-emacs@HIDDEN:bug#81619; Package emacs.
Full text available.
Received: (at submit) by debbugs.gnu.org; 14 Aug 2026 09:05:50 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Aug 14 05:05:49 2026
Received: from localhost ([127.0.0.1]:54470 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1wunrF-0004CT-3F
for submit <at> debbugs.gnu.org; Fri, 14 Aug 2026 05:05:49 -0400
Received: from lists1p.gnu.org ([2001:470:142::17]:51332)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.84_2) (envelope-from <richard.garner@HIDDEN>)
id 1wukxe-0000ZH-Tn
for submit <at> debbugs.gnu.org; Fri, 14 Aug 2026 02:00:15 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <richard.garner@HIDDEN>)
id 1wukxW-0002La-4G
for bug-gnu-emacs@HIDDEN; Fri, 14 Aug 2026 02:00:03 -0400
Received: from au-smtp-delivery-110.mimecast.com ([103.96.23.110])
by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <richard.garner@HIDDEN>)
id 1wukxP-00055n-HI
for bug-gnu-emacs@HIDDEN; Fri, 14 Aug 2026 02:00:00 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mq.edu.au;
s=mimecast20180308; t=1786687186;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:mime-version:mime-version:content-type:content-type:
content-transfer-encoding:content-transfer-encoding;
bh=TxCcqsMAl2HEmHnAAwyXw9OoIJHus4J8mV+YUlGIlw0=;
b=SfEfNEM2DNt27xsG5cR/lsKw3k4t0j9u4ubcBj73a8QhVlOL0lvos8IV36R3D03/N7SWK2
FL5bCuW6M0qn7jVi7fXc8CRlTh+qeopN0jhqjb4LinZduJ3JxAWMHpX4U4yYyYvRInC+Vm
yR06fdUb4b13nVl/zWFN525E+YN59Tw=
Received: from SY8PR01CU002.outbound.protection.outlook.com
(mail-australiaeastazon11020086.outbound.protection.outlook.com
[52.101.150.86]) by relay.mimecast.com with ESMTP with STARTTLS
(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
au-mta-20-rcw5cuQ6N66xVrousmdveA-1; Fri, 14 Aug 2026 15:58:25 +1000
X-MC-Unique: rcw5cuQ6N66xVrousmdveA-1
X-Mimecast-MFC-AGG-ID: rcw5cuQ6N66xVrousmdveA_1786687104
Received: from SY1PR01MB10676.ausprd01.prod.outlook.com (2603:10c6:10:317::16)
by MEWPR01MB9069.ausprd01.prod.outlook.com (2603:10c6:220:1fa::21)
with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.15; Fri, 14 Aug
2026 05:58:21 +0000
Received: from SY1PR01MB10676.ausprd01.prod.outlook.com
([fe80::531:98e3:552f:e84a]) by SY1PR01MB10676.ausprd01.prod.outlook.com
([fe80::531:98e3:552f:e84a%3]) with mapi id 15.21.0315.014; Fri, 14 Aug 2026
05:58:20 +0000
From: Richard Garner <richard.garner@HIDDEN>
To: bug-gnu-emacs@HIDDEN
Subject: 30.1; draggingUpdated callback in nsterm.m invokes redisplay with
waiting_for_input set, aborting Emacs
Message-ID: <m0qzk1nuqp.fsf_-_@HIDDEN>
User-Agent: mu4e 1.14.2; emacs 30.1
X-Debbugs-Cc:
Date: Fri, 14 Aug 2026 15:58:18 +1000
X-ClientProxiedBy: SY5P282CA0138.AUSP282.PROD.OUTLOOK.COM
(2603:10c6:10:205::18) To SY1PR01MB10676.ausprd01.prod.outlook.com
(2603:10c6:10:317::16)
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: SY1PR01MB10676:EE_|MEWPR01MB9069:EE_
X-MS-Office365-Filtering-Correlation-Id: 30733cec-f235-46eb-f3b7-08def9c90ad6
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
ARA:13230040|23010399003|786006|1800799024|366016|376014|19092799006|6133799003|18002099003|5023799004|11063799006|10067099003|56012099006|3023799007
X-Microsoft-Antispam-Message-Info: 3vQl0NoneLRZLYsMPROH54bdv4M+EkoFEntGkSyZvZcpolwRcYREwZ5V+lH/bB1kYeO/ErZQOIVTY4X7pl+jFhos2n9/nD90UPp/htdnFXorDUFSPL8fwAsYd/lT4dDaq5CRcdmCFRbkmKKUPZZtPD6zAvMGrMNMMJlJIOnoo12NMLcZgsO36H0pTI6KIaNXFG/WCjZlopBNdj30aeY5RfunVCzMQo7eBqkVbqfqPrWxayx4mSUEuJ/LLOv5p34hwifg4NW+1phBkITLvqTj7PrEzldterRxVab6s1WICdhy6BtaXbVuW1qap2T1+sATq6qyV+2TFyuPxIoCxJqLSvmCeA5efG8PlU9HOnjwBT6x4xS4PAQGmcHYr2blhqZlSCXs6xfbzpdusKDOk9ZiweGnRi9es4gXwcOz2smpL1AqbMfTWM7LHvz/x3JWTQnpWmT1nCSXw+CO7I3B/4UOb0QS3kNPiHJGzWSyoK4cq3H9u8aeaoWFpTWMO/2cf1hOyOafdBlYugwSGxyFzi/OMXtXs9R4sNQI9ZBcrV8BQkmbzcgMFHd5JPUoskgAy55cLUugf/sH/mtJkgyXhyd81+zTV8xYxSxvMGwoXItk2j7VpblK1bfXql5oA/WFjH4uw3Da9dvM+yTlA/q7URqM1QKAmVw7BKAao7XYrk5fn7o=
X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;
IPV:NLI; SFV:NSPM; H:SY1PR01MB10676.ausprd01.prod.outlook.com; PTR:; CAT:NONE;
SFS:(13230040)(23010399003)(786006)(1800799024)(366016)(376014)(19092799006)(6133799003)(18002099003)(5023799004)(11063799006)(10067099003)(56012099006)(3023799007);
DIR:OUT; SFP:1102
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?G+5ahv0GBXvipDOQ7SKFHapt6UwpF2qMdVqlki7SlmBK29SEwoBSdD8pz6UO?=
=?us-ascii?Q?3hDUXpaqGabNvefoZeyO/+kOq37W5q5FlGCYt/12ucpiwKzpM5sq95j/HjJQ?=
=?us-ascii?Q?pviyGXKijyByZKdhVhM8gbYZ0yI+wTyrjPb0oLAUlXuPIXF+uARiXFGiu+YM?=
=?us-ascii?Q?rtHTl9BG6sv+u1sHOxZpS1R/2y4jCRLW+0DhaSVS7LUTdvXA2KxaQ+XwnUqr?=
=?us-ascii?Q?vNdkF1/iQcT5XwU/FVIly7B2V8cYFmzEQAROmDKJrGFc6BPbGQN0hwCOhJrZ?=
=?us-ascii?Q?GvRitsTXVsVZAUzn9XQbxpW6JNrfvb2uaUcyYm8Zv4TPvuPLk7r7B6g/C9cC?=
=?us-ascii?Q?+NgyDvF7PxMDNg7Ni0mJz2oYxmK0IpxCoxwPSQCah4P9z49OzBR3jV+4Eg06?=
=?us-ascii?Q?n+zgcwENQKEBLyjyjOs/ctwQ5yVsmmbLOjcw0FiaGmLKW53v0aWr69ccAK+y?=
=?us-ascii?Q?RiHuLWL1mR2A0gqMKMfoPEVBEjjokhFP9FW0QaYjm6gkhiRYn0WI0JHHuLG3?=
=?us-ascii?Q?rRDN6SYpaCXGq4o1g8AZFLxmXcq8Wd/xh0SdFHF3gOZ2bCmJZbvnxPruQGQ8?=
=?us-ascii?Q?mpbghfnOYLDR6XEldzz14x5B0t7QzZjo0N4GCbdmu6Rw/x0E+iPqWyxTB4c1?=
=?us-ascii?Q?jrEdimn43hp4ZFDpKYh+cpcFaOmUcRyxxh4ikC2bqWhmGfl5uPAFYvrkyMeX?=
=?us-ascii?Q?QE4NPi38AeTzYOBcXG7jN4MVsa7XTcocHsabwiDjiGS2qe6QY7cJ0EDMkqpN?=
=?us-ascii?Q?Lb510HFIlfsyn/lv0dX69aTuuS1C2iPzqJtEkQIdHno/4p9uOdfK5eYfOWT4?=
=?us-ascii?Q?0/Iuh/WS/s9ueZLFIER92lYD1NGpUj8s9VCneDdD+rw0tGU5v85vZOHJrQEX?=
=?us-ascii?Q?IDLR7xPYf1dgrtL1COQvMvCOeb8LvjfDVl0r7l6SlMv62poumgyX48zIAAbm?=
=?us-ascii?Q?OzcDA/QeojcbdLLTJA8u5UnPihAnTTm7NckgPyIIzZGfUm9ViBMhBgGnF9Uk?=
=?us-ascii?Q?HWVWBZvwk/8zDiLBBLWpTGv4qpQPKKaHQbWCO/L8MYytGf9IZMrbyn8nmF2W?=
=?us-ascii?Q?ByOCo5ZIgakB5wFLbFX+eTK21Xi2Ia30KhEKqnkggUhBRCr/U1FsEKEAy4dz?=
=?us-ascii?Q?Fgy2nvqUw5PkvtjU3DxR2lZPbJX2v1mi5mjU1ueg3mn03Wp5dSszo3h/QBbO?=
=?us-ascii?Q?oQ6dSYTcjzImTkLsA7oa7u6erJ6453xA9x/nvIWujF/rZNaxAJI4tM4lHrRm?=
=?us-ascii?Q?0paSwnyToafHFZr9KdGqrTXlOFptz/lHMRLB3WJS9OqfrzZP5l3E38YGHUXl?=
=?us-ascii?Q?xBJ3SjnSMx3bs75UOC1/wfQFevP899eoOukjmT5kKfvKL/R8X1y0M5YoTK/U?=
=?us-ascii?Q?gjO/QHwnpsDi8U0UUsTyXI2MZ4/Xt2qhyEifTzsvnOf34kvhp0cPmulQ8UOJ?=
=?us-ascii?Q?MWfQzsEb921vGskbm55wm508/hl5et4RwEmElz7kf5Mp5W6IpvkdoRdZcKx/?=
=?us-ascii?Q?M+rTyJ+ZEvJnZwsrSfR9dGNCKFexGa7sz2+TG8sdnAH6wLihuergtmZHsEaf?=
=?us-ascii?Q?iW9Du2dQzCRhrsvV5dFfcjCpHnshAyQQGoaHk4kF0ZptZw5f2C7fNv2YxrhH?=
=?us-ascii?Q?LC4wVzNgrmE5ZXCP3tbG2NENU9Qu/1G4m1JliWbnZX5ujYAJ0OtBa+SqvLnv?=
=?us-ascii?Q?06Ie73kj7pYC83SvYWiURjylgydX99JiT75XjKX2oo62d+V/Fzp+8CUPKCBo?=
=?us-ascii?Q?BGjBxbnACNjM8FZDr5H+BBA4yKhbJd0=3D?=
X-Exchange-RoutingPolicyChecked: rpcUcCbpWIiAXkkFd0/OPVInSOjlHQW2IWmbAckPho0vr0EuuBn3+X794C6Ir9oPJGyk2TqTMfmeD0kM+tZHJMyTQR+AOhLcAY+YBK7KJnD0q9lFKfEefL1Y528Y0BVTv/vxkaXishgOVC0xqsRe+amizuYp3S4WKmizXBWBkQIALn67Kgn3lCjBqEuNWuq9+n3tZdRhSyBwNL/YN3ETuWReOfThmdw8bc6o3N6GFAXkidyIq3exryplyknq3RdrkZ1efqECQZbD1BC3lBroiWBkeBqY5Pygvnc2R2cFF2LRmlMmyd7u8tPmtcolkxh7ui90qVU7yHMbwQJURTHJSw==
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: PXECSj+Qk6FxPrMjS/nBSfI3FH6drx/3wyNef30TJv1TbP1NDRuI6S7KUiVBLYKgdO3htlPgT7gLiWopRNE7CV+eP3OBkBHnDw/gHR+TtC9Q/ZrWsp4LwsT64rdE6os1zEoP75vAnb61f/ni09i2FtCrBHet7SAOQV9KYlON7KSW0r2FE8Pc207JZuAAD5mvZdjRYssAQeeX1dRdW297b0VZGaqxZon0mnHnjmA99wS9EH/OEQs2I1Em60prx4F8KjBgZ2C0jlH50371dTSMM0p1UlEE6WnBBlCNP47La8jzLr3LVuoQbd+U96IzccViw206jp8X6FSH7FZJ3+rl4Q7b+jBmPmeS4+lANOy7JFU65DhD88ClAx5QZvooMV87hmbAinCdwMj1rqGt94/BRzWfLp33vuzKfbEeSsO1P+UAuQO2YBJ/RzIn9BgSAoCjp9vf5sNmincOWgwYgMztS33IjTlxsVzOQq36x9kW/ciTX62RDC2FPNXZgFAI7qA75K6fn7VEpHRzSEgcvW8jySqaJYDKXqFiVUZO+sd8bBfiHEfNxETA+BVfADHf75bm0KXZ5bCD41a1+hptlErI7XuR9BD3A5bHAOfoQpMKWyU592Uqy3a20FdNAPDQr+ijrUkKsARLp63k6pR1A9tcnA==
X-OriginatorOrg: mq.edu.au
X-MS-Exchange-CrossTenant-Network-Message-Id: 30733cec-f235-46eb-f3b7-08def9c90ad6
X-MS-Exchange-CrossTenant-AuthSource: SY1PR01MB10676.ausprd01.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Aug 2026 05:58:20.0521 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 82c514c1-a717-4087-be06-d40d2070ad52
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: P+M+7BeDQ9MImkRg966/lvwOn9OMXSkRH1yR22fZ4ShCOHsAZKovAcNfhXOcnaiaCrFidLOLNWjJMAelp4rZtH4WG7VHUuDZpg64BfCPhyA=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MEWPR01MB9069
X-Mimecast-Spam-Score: 0
X-Mimecast-MFC-PROC-ID: RycEFa_xvzjdEhzaTm9IZBPugY-fpZPlDz78cJwGbz0_1786687104
X-Mimecast-Originator: mq.edu.au
Content-Type: text/plain; charset=WINDOWS-1252
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass client-ip=103.96.23.110;
envelope-from=richard.garner@HIDDEN; helo=au-smtp-delivery-110.mimecast.com
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, SPF_HELO_PASS=-0.001,
SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: submit
X-Mailman-Approved-At: Fri, 14 Aug 2026 05:05:44 -0400
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)
The bug
-------
Dragging a file over an Emacs frame on macOS sometimes causes an instant
Emacs abort, with no error message: Emacs simply disappears.
This appears to be because the NS drag callback runs redisplay in a
fragile state where no Lisp signals are permitted.
The analysis
------------
My macOS crash logs gave me this traceback:
#8 emacs_abort
#9 signal_or_quit
#10 Fsignal
#13 args_out_of_range
#14 Faref
#15 truncate-string-to-width (mule-util, natively compiled)
#17 mu4e--modeline-quote-and-truncate
#19 mu4e--modeline-string
#23 internal_condition_case_n
#24 dsafe__call
#25 display_mode_element (x5)
#30 Fformat_mode_line
#40 internal_condition_case_n
#41 dsafe__call
#42 display_mode_element
#43 display_mode_line
#44 display_mode_lines
#45 redisplay_window
#48 redisplay_internal
#49 -[EmacsView draggingUpdated:]
#50 -[NSDragDestination _draggingUpdate]
#52 NSCoreDragTrackingProc
Here you can see -[EmacsView draggingUpdated:] calling redisplay(); this
is nsterm.m:9494. Inside redisplay(), the modelines are updated,
including the elisp inside any :eval forms. In my config, one of these
calls truncate-string-to-width from mule-util.el. This iterates over a
string with aref inside a condition-case, and catches args-out-of-range
as the loop terminator.
This is perfectly blameless (and stock) elisp, but here redisplay is
being called while Emacs is idling in wait_reading_process_output with
waiting_for_input set. In this state, any signal raised causes an
instant abort (eval.c:1961). Even a handled signal is not safe: the
condition-case in truncate-string-to-width is bypassed, as are
redisplay's own guards at frames #23 and #40. signal_or_quit aborts
without consulting any handlers, so Emacs vanishes without trace.
Running Emacs through lldb, I think I can trace the mechanism:
frame #18: Emacs`ns_select_1 + 784
frame #19: Emacs`wait_reading_process_output + 3312
frame #20: Emacs`sit_for + 384
frame #21: Emacs`read_char + 4884
- read_char calls sit_for with reading =3D 1, from either the
echo-keystrokes wait or the auto-save idle wait;
- because reading =3D 1, sit_for passes read_kbd =3D -1;
- because read_kbd is negative, wait_reading_process_output calls
set_waiting_for_input.
Nothing in nsterm.m or nsmenu.m clears it around the NS event loop, so
it is still set when AppKit calls into the view.
The fix
-------
This issue has already been worked around elsewhere. dnd.el:155-157
tries to do so from the elisp side with the comment "We avoid errors
here, since on some systems this runs when waiting_for_input is
non-zero, and that aborts on error."
However, nsterm.m:9380-9389, a hundred lines earlier, has a fix that
works on the Objective C side; it says:
"If there is IO going on when redisplay is run here Emacs crashes. I
think it's because this code will always be run within the run loop and
for whatever reason processing input is dangerous. This technique was
stolen wholesale from nsmenu.m and seems to work."
The place it was stolen from is nsmenu.m:201-254; propagating the
wholesale theft further yields the following minimal patch against
master:
--8<---------------cut here---------------start------------->8---
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -9491,7 +9491,19 @@
safe_calln (Vns_drag_motion_function, frame,
=09 make_fixnum (x), make_fixnum (y));
=20
- redisplay ();
+ /* Since redisplay can call arbitrary Lisp that may signal, we
+ guard against calling it while waiting_for_input is set, in
+ which state any signal causes an immediate abort. */
+ {
+ bool owfi =3D waiting_for_input;
+ waiting_for_input =3D 0;
+ block_input ();
+
+ redisplay ();
+
+ unblock_input ();
+ waiting_for_input =3D owfi;
+ }
#endif
=20
unbind_to (count, Qnil);
--8<---------------cut here---------------end--------------->8---
However, a manoeuvre that's good enough to steal twice maybe deserves
its own helper.
In GNU Emacs 30.1 (build 2, aarch64-apple-darwin22.6.0, NS
appkit-2299.77 Version 13.7.6 (Build 22H625)) of 2026-04-26 built on
Triptykon
Windowing system distributor 'Apple', version 10.3.2487
System Description: macOS 14.8.7
Configured using:
'configure --disable-dependency-tracking --disable-silent-rules
--enable-locallisppath=3D/opt/homebrew/share/emacs/site-lisp
--infodir=3D/opt/homebrew/Cellar/emacs-plus@30/30.1/share/info/emacs
--prefix=3D/opt/homebrew/Cellar/emacs-plus@30/30.1
--with-native-compilation=3Daot --with-xml2 --with-gnutls
--without-compress-install --without-dbus --with-imagemagick
--with-modules --with-rsvg --with-webp --with-ns
--disable-ns-self-contained 'CFLAGS=3D-O2 -DFD_SETSIZE=3D10000
-DDARWIN_UNLIMITED_SELECT -I/opt/homebrew/opt/sqlite/include
-I/opt/homebrew/opt/gcc/include -I/opt/homebrew/opt/libgccjit/include'
'LDFLAGS=3D-L/opt/homebrew/opt/sqlite/lib -L/opt/homebrew/lib/gcc/15
-I/opt/homebrew/opt/gcc/include -I/opt/homebrew/opt/libgccjit/include''
Configured features:
ACL GIF GLIB GMP GNUTLS IMAGEMAGICK JPEG LCMS2 LIBXML2 MODULES
NATIVE_COMP NOTIFY KQUEUE NS PDUMPER PNG RSVG SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM ZLIB
Important settings:
value of $LANG: en_AU.UTF-8
locale-coding-system: utf-8
Major mode: Fundamental
Minor modes in effect:
pdf-occur-global-minor-mode: t
csv-field-index-mode: t
global-git-commit-mode: t
global-corfu-mode: t
corfu-mode: t
global-treesit-auto-mode: t
vertico-prescient-mode: t
prescient-persist-mode: t
vertico-mode: t
yas-global-mode: t
yas-minor-mode: t
smartparens-global-mode: t
smartparens-mode: t
whole-line-or-region-global-mode: t
whole-line-or-region-local-mode: t
remember-notes-mode: t
savehist-mode: t
recentf-mode: t
override-global-mode: t
global-so-long-mode: t
global-auto-revert-mode: t
global-display-fill-column-indicator-mode: t
display-fill-column-indicator-mode: t
display-time-mode: t
server-mode: t
straight-use-package-mode: t
straight-package-neutering-mode: t
tooltip-mode: t
global-eldoc-mode: t
show-paren-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
minibuffer-regexp-mode: t
size-indication-mode: t
column-number-mode: t
line-number-mode: t
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
Load-path shadows:
/Users/rgarner/.emacs.d/straight/build/bind-key/bind-key hides /Users/rgarn=
er/.emacs.d/straight/build/use-package/bind-key
/Users/rgarner/.emacs.d/straight/build/svg/svg hides /opt/homebrew/Cellar/e=
macs-plus@30/30.1/share/emacs/30.1/lisp/svg
/Users/rgarner/.emacs.d/straight/build/transient/transient hides /opt/homeb=
rew/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/transient
/Users/rgarner/.emacs.d/straight/build/bind-key/bind-key hides /opt/homebre=
w/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/bind-key
/Users/rgarner/.emacs.d/straight/build/use-package/use-package-jump hides /=
opt/homebrew/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/use-package/us=
e-package-jump
/Users/rgarner/.emacs.d/straight/build/use-package/use-package-ensure-syste=
m-package hides /opt/homebrew/Cellar/emacs-plus@30/30.1/share/emacs/30.1/li=
sp/use-package/use-package-ensure-system-package
/Users/rgarner/.emacs.d/straight/build/use-package/use-package-diminish hid=
es /opt/homebrew/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/use-packag=
e/use-package-diminish
/Users/rgarner/.emacs.d/straight/build/use-package/use-package hides /opt/h=
omebrew/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/use-package/use-pac=
kage
/Users/rgarner/.emacs.d/straight/build/use-package/use-package-delight hide=
s /opt/homebrew/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/use-package=
/use-package-delight
/Users/rgarner/.emacs.d/straight/build/use-package/use-package-lint hides /=
opt/homebrew/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/use-package/us=
e-package-lint
/Users/rgarner/.emacs.d/straight/build/use-package/use-package-core hides /=
opt/homebrew/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/use-package/us=
e-package-core
/Users/rgarner/.emacs.d/straight/build/use-package/use-package-ensure hides=
/opt/homebrew/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/use-package/=
use-package-ensure
/Users/rgarner/.emacs.d/straight/build/use-package/use-package-bind-key hid=
es /opt/homebrew/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/use-packag=
e/use-package-bind-key
/Users/rgarner/.emacs.d/straight/build/org/ob-comint hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-comint
/Users/rgarner/.emacs.d/straight/build/org/ob-exp hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-exp
/Users/rgarner/.emacs.d/straight/build/org/org-ctags hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-ctags
/Users/rgarner/.emacs.d/straight/build/org/ob-emacs-lisp hides /opt/homebre=
w/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-emacs-lisp
/Users/rgarner/.emacs.d/straight/build/org/oc hides /opt/homebrew/Cellar/em=
acs-plus@30/30.1/share/emacs/30.1/lisp/org/oc
/Users/rgarner/.emacs.d/straight/build/org/ox-texinfo hides /opt/homebrew/C=
ellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ox-texinfo
/Users/rgarner/.emacs.d/straight/build/org/ol-irc hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ol-irc
/Users/rgarner/.emacs.d/straight/build/org/ol-doi hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ol-doi
/Users/rgarner/.emacs.d/straight/build/org/ob hides /opt/homebrew/Cellar/em=
acs-plus@30/30.1/share/emacs/30.1/lisp/org/ob
/Users/rgarner/.emacs.d/straight/build/org/org-refile hides /opt/homebrew/C=
ellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-refile
/Users/rgarner/.emacs.d/straight/build/org/org-version hides /opt/homebrew/=
Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-version
/Users/rgarner/.emacs.d/straight/build/org/org-num hides /opt/homebrew/Cell=
ar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-num
/Users/rgarner/.emacs.d/straight/build/org/ol-mhe hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ol-mhe
/Users/rgarner/.emacs.d/straight/build/org/ob-shell hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-shell
/Users/rgarner/.emacs.d/straight/build/org/org-attach hides /opt/homebrew/C=
ellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-attach
/Users/rgarner/.emacs.d/straight/build/org/ob-C hides /opt/homebrew/Cellar/=
emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-C
/Users/rgarner/.emacs.d/straight/build/org/org-macs hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-macs
/Users/rgarner/.emacs.d/straight/build/org/org-entities hides /opt/homebrew=
/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-entities
/Users/rgarner/.emacs.d/straight/build/org/ob-dot hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-dot
/Users/rgarner/.emacs.d/straight/build/org/ob-sql hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-sql
/Users/rgarner/.emacs.d/straight/build/org/ol-eww hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ol-eww
/Users/rgarner/.emacs.d/straight/build/org/org-datetree hides /opt/homebrew=
/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-datetree
/Users/rgarner/.emacs.d/straight/build/org/org-macro hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-macro
/Users/rgarner/.emacs.d/straight/build/org/ob-eval hides /opt/homebrew/Cell=
ar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-eval
/Users/rgarner/.emacs.d/straight/build/org/ob-haskell hides /opt/homebrew/C=
ellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-haskell
/Users/rgarner/.emacs.d/straight/build/org/ox-org hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ox-org
/Users/rgarner/.emacs.d/straight/build/org/ol-rmail hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ol-rmail
/Users/rgarner/.emacs.d/straight/build/org/ob-awk hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-awk
/Users/rgarner/.emacs.d/straight/build/org/ob-groovy hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-groovy
/Users/rgarner/.emacs.d/straight/build/org/ox-icalendar hides /opt/homebrew=
/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ox-icalendar
/Users/rgarner/.emacs.d/straight/build/org/ob-octave hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-octave
/Users/rgarner/.emacs.d/straight/build/org/ob-scheme hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-scheme
/Users/rgarner/.emacs.d/straight/build/org/org-mobile hides /opt/homebrew/C=
ellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-mobile
/Users/rgarner/.emacs.d/straight/build/org/ob-processing hides /opt/homebre=
w/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-processing
/Users/rgarner/.emacs.d/straight/build/org/oc-biblatex hides /opt/homebrew/=
Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/oc-biblatex
/Users/rgarner/.emacs.d/straight/build/org/oc-csl hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/oc-csl
/Users/rgarner/.emacs.d/straight/build/org/org-colview hides /opt/homebrew/=
Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-colview
/Users/rgarner/.emacs.d/straight/build/org/ob-R hides /opt/homebrew/Cellar/=
emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-R
/Users/rgarner/.emacs.d/straight/build/org/org-table hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-table
/Users/rgarner/.emacs.d/straight/build/org/ox-html hides /opt/homebrew/Cell=
ar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ox-html
/Users/rgarner/.emacs.d/straight/build/org/ob-fortran hides /opt/homebrew/C=
ellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-fortran
/Users/rgarner/.emacs.d/straight/build/org/ol hides /opt/homebrew/Cellar/em=
acs-plus@30/30.1/share/emacs/30.1/lisp/org/ol
/Users/rgarner/.emacs.d/straight/build/org/ob-plantuml hides /opt/homebrew/=
Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-plantuml
/Users/rgarner/.emacs.d/straight/build/org/ol-docview hides /opt/homebrew/C=
ellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ol-docview
/Users/rgarner/.emacs.d/straight/build/org/ob-perl hides /opt/homebrew/Cell=
ar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-perl
/Users/rgarner/.emacs.d/straight/build/org/ob-sqlite hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-sqlite
/Users/rgarner/.emacs.d/straight/build/org/oc-basic hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/oc-basic
/Users/rgarner/.emacs.d/straight/build/org/ob-sed hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-sed
/Users/rgarner/.emacs.d/straight/build/org/org-fold-core hides /opt/homebre=
w/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-fold-core
/Users/rgarner/.emacs.d/straight/build/org/ob-ditaa hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-ditaa
/Users/rgarner/.emacs.d/straight/build/org/ob-ruby hides /opt/homebrew/Cell=
ar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-ruby
/Users/rgarner/.emacs.d/straight/build/org/oc-bibtex hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/oc-bibtex
/Users/rgarner/.emacs.d/straight/build/org/org-habit hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-habit
/Users/rgarner/.emacs.d/straight/build/org/org-loaddefs hides /opt/homebrew=
/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-loaddefs
/Users/rgarner/.emacs.d/straight/build/org/ol-gnus hides /opt/homebrew/Cell=
ar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ol-gnus
/Users/rgarner/.emacs.d/straight/build/org/ob-screen hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-screen
/Users/rgarner/.emacs.d/straight/build/org/org-mouse hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-mouse
/Users/rgarner/.emacs.d/straight/build/org/ob-css hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-css
/Users/rgarner/.emacs.d/straight/build/org/org-inlinetask hides /opt/homebr=
ew/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-inlinetask
/Users/rgarner/.emacs.d/straight/build/org/ob-lisp hides /opt/homebrew/Cell=
ar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-lisp
/Users/rgarner/.emacs.d/straight/build/org/ol-eshell hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ol-eshell
/Users/rgarner/.emacs.d/straight/build/org/org-pcomplete hides /opt/homebre=
w/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-pcomplete
/Users/rgarner/.emacs.d/straight/build/org/org-lint hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-lint
/Users/rgarner/.emacs.d/straight/build/org/org-id hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-id
/Users/rgarner/.emacs.d/straight/build/org/org-capture hides /opt/homebrew/=
Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-capture
/Users/rgarner/.emacs.d/straight/build/org/ob-sass hides /opt/homebrew/Cell=
ar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-sass
/Users/rgarner/.emacs.d/straight/build/org/ob-tangle hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-tangle
/Users/rgarner/.emacs.d/straight/build/org/ob-calc hides /opt/homebrew/Cell=
ar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-calc
/Users/rgarner/.emacs.d/straight/build/org/ob-java hides /opt/homebrew/Cell=
ar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-java
/Users/rgarner/.emacs.d/straight/build/org/org-compat hides /opt/homebrew/C=
ellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-compat
/Users/rgarner/.emacs.d/straight/build/org/org-attach-git hides /opt/homebr=
ew/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-attach-git
/Users/rgarner/.emacs.d/straight/build/org/ox-beamer hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ox-beamer
/Users/rgarner/.emacs.d/straight/build/org/org-protocol hides /opt/homebrew=
/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-protocol
/Users/rgarner/.emacs.d/straight/build/org/org-element hides /opt/homebrew/=
Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-element
/Users/rgarner/.emacs.d/straight/build/org/ob-lob hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-lob
/Users/rgarner/.emacs.d/straight/build/org/org-tempo hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-tempo
/Users/rgarner/.emacs.d/straight/build/org/ob-python hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-python
/Users/rgarner/.emacs.d/straight/build/org/ob-latex hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-latex
/Users/rgarner/.emacs.d/straight/build/org/ol-w3m hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ol-w3m
/Users/rgarner/.emacs.d/straight/build/org/org-agenda hides /opt/homebrew/C=
ellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-agenda
/Users/rgarner/.emacs.d/straight/build/org/org-persist hides /opt/homebrew/=
Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-persist
/Users/rgarner/.emacs.d/straight/build/org/ob-ocaml hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-ocaml
/Users/rgarner/.emacs.d/straight/build/org/ob-ref hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-ref
/Users/rgarner/.emacs.d/straight/build/org/org-fold hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-fold
/Users/rgarner/.emacs.d/straight/build/org/ob-julia hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-julia
/Users/rgarner/.emacs.d/straight/build/org/ob-lilypond hides /opt/homebrew/=
Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-lilypond
/Users/rgarner/.emacs.d/straight/build/org/ob-table hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-table
/Users/rgarner/.emacs.d/straight/build/org/ob-clojure hides /opt/homebrew/C=
ellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-clojure
/Users/rgarner/.emacs.d/straight/build/org/org-indent hides /opt/homebrew/C=
ellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-indent
/Users/rgarner/.emacs.d/straight/build/org/org-plot hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-plot
/Users/rgarner/.emacs.d/straight/build/org/ox-latex hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ox-latex
/Users/rgarner/.emacs.d/straight/build/org/org-src hides /opt/homebrew/Cell=
ar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-src
/Users/rgarner/.emacs.d/straight/build/org/org-duration hides /opt/homebrew=
/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-duration
/Users/rgarner/.emacs.d/straight/build/org/ob-makefile hides /opt/homebrew/=
Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-makefile
/Users/rgarner/.emacs.d/straight/build/org/ol-info hides /opt/homebrew/Cell=
ar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ol-info
/Users/rgarner/.emacs.d/straight/build/org/org-clock hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-clock
/Users/rgarner/.emacs.d/straight/build/org/ob-forth hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-forth
/Users/rgarner/.emacs.d/straight/build/org/ox-odt hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ox-odt
/Users/rgarner/.emacs.d/straight/build/org/ol-man hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ol-man
/Users/rgarner/.emacs.d/straight/build/org/ox-publish hides /opt/homebrew/C=
ellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ox-publish
/Users/rgarner/.emacs.d/straight/build/org/org-archive hides /opt/homebrew/=
Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-archive
/Users/rgarner/.emacs.d/straight/build/org/ob-org hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-org
/Users/rgarner/.emacs.d/straight/build/org/ob-lua hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-lua
/Users/rgarner/.emacs.d/straight/build/org/org-keys hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-keys
/Users/rgarner/.emacs.d/straight/build/org/ob-eshell hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-eshell
/Users/rgarner/.emacs.d/straight/build/org/org-faces hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-faces
/Users/rgarner/.emacs.d/straight/build/org/ox-man hides /opt/homebrew/Cella=
r/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ox-man
/Users/rgarner/.emacs.d/straight/build/org/org-list hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-list
/Users/rgarner/.emacs.d/straight/build/org/ox-md hides /opt/homebrew/Cellar=
/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ox-md
/Users/rgarner/.emacs.d/straight/build/org/org-goto hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-goto
/Users/rgarner/.emacs.d/straight/build/org/ol-bbdb hides /opt/homebrew/Cell=
ar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ol-bbdb
/Users/rgarner/.emacs.d/straight/build/org/org hides /opt/homebrew/Cellar/e=
macs-plus@30/30.1/share/emacs/30.1/lisp/org/org
/Users/rgarner/.emacs.d/straight/build/org/ol-bibtex hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ol-bibtex
/Users/rgarner/.emacs.d/straight/build/org/ox-koma-letter hides /opt/homebr=
ew/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ox-koma-letter
/Users/rgarner/.emacs.d/straight/build/org/ox-ascii hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ox-ascii
/Users/rgarner/.emacs.d/straight/build/org/ob-matlab hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-matlab
/Users/rgarner/.emacs.d/straight/build/org/ox hides /opt/homebrew/Cellar/em=
acs-plus@30/30.1/share/emacs/30.1/lisp/org/ox
/Users/rgarner/.emacs.d/straight/build/org/org-timer hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-timer
/Users/rgarner/.emacs.d/straight/build/org/oc-natbib hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/oc-natbib
/Users/rgarner/.emacs.d/straight/build/org/ob-core hides /opt/homebrew/Cell=
ar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-core
/Users/rgarner/.emacs.d/straight/build/org/org-feed hides /opt/homebrew/Cel=
lar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-feed
/Users/rgarner/.emacs.d/straight/build/org/ob-gnuplot hides /opt/homebrew/C=
ellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-gnuplot
/Users/rgarner/.emacs.d/straight/build/org/ob-js hides /opt/homebrew/Cellar=
/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-js
/Users/rgarner/.emacs.d/straight/build/org/org-element-ast hides /opt/homeb=
rew/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-element-ast
/Users/rgarner/.emacs.d/straight/build/org/org-footnote hides /opt/homebrew=
/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-footnote
/Users/rgarner/.emacs.d/straight/build/org/ob-maxima hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/ob-maxima
/Users/rgarner/.emacs.d/straight/build/org/org-cycle hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-cycle
/Users/rgarner/.emacs.d/straight/build/org/org-crypt hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/org/org-crypt
/Users/rgarner/.emacs.d/straight/build/compat/compat hides /opt/homebrew/Ce=
llar/emacs-plus@30/30.1/share/emacs/30.1/lisp/emacs-lisp/compat
/Users/rgarner/.emacs.d/straight/build/let-alist/let-alist hides /opt/homeb=
rew/Cellar/emacs-plus@30/30.1/share/emacs/30.1/lisp/emacs-lisp/let-alist
Features:
(shadow emacsbug avy json-ts-mode cal-move rect hideshow eglot
external-completion jsonrpc flymake ert ewoc debug backtrace lua-ts-mode
smartparens-c cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles
cc-align cc-engine cc-vars cc-defs cl-print magit-extras patch-review
pdf-sync pdf-annot pdf-outline pdf-links pdf-history pdf-occur ibuf-ext
ibuffer ibuffer-loaddefs tablist tablist-filter semantic/wisent/comp
semantic/wisent semantic/wisent/wisent semantic/util-modes semantic/util
semantic semantic/tag semantic/lex semantic/fw mode-local cedet
pdf-isearch pdf-misc pdf-tools package url-handlers pdf-view pdf-cache
pdf-info tq pdf-util pdf-macs tabify org-datetree cal-iso vc-hg vc-bzr
vc-src vc-sccs vc-svn vc-cvs vc-rcs log-view vc bug-reference
magit-bookmark magit-submodule magit-blame magit-stash magit-reflog
magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote
magit-commit magit-sequence magit-notes magit-worktree magit-tag
magit-merge magit-branch magit-reset magit-files magit-refs magit-status
magit magit-repos magit-apply magit-wip magit-log csv-mode tramp-cache
time-stamp tramp-sh shortdoc help-fns radix-tree network-stream nsm
mailalias qp misearch multi-isearch etags fileloop xref
display-line-numbers clyde magit-diff which-func smerge-mode diff
git-commit log-edit pcvs-util add-log magit-core magit-autorevert
magit-margin magit-transient magit-process with-editor magit-mode
benchmark magit-git magit-base magit-section cursor-sensor consult-dir
consult sgml-mode facemenu smartparens-markdown markdown-mode dired-aux
view vertico-directory sort smiley gnus-cite mm-archive mail-extr
textsec uni-scripts idna-mapping uni-confusable textsec-check
rg-editorial vc-git diff-mode track-changes vc-dispatcher ghostel
ghostel-module ghostel-prompt imenu ghostel-module-install ghostel-links
ghostel-line-mode ghostel-kitty ghostel-faces ghostel-autoloads wgrep
grep wgrep-autoloads corfu corfu-autoloads smartparens-lua lua-mode
lua-mode-autoloads treesit-auto treesit-auto-autoloads smartparens-html
web-mode web-mode-autoloads vterm tramp trampver tramp-integration
files-x tramp-message tramp-compat tramp-loaddefs face-remap compile
color term disp-table shell ehelp vterm-module term/xterm xterm
vterm-autoloads magit-autoloads with-editor-autoloads
magit-section-autoloads rg-code rg-outlook-sync rg-notes morc
mu4e-icalendar gnus-icalendar icalendar rg-mu4e mu4e mu4e-org
mu4e-transient gnus-ml mu4e-notification notifications mu4e-main
smtpmail mu4e-view mu4e-mime-parts crm mu4e-headers mu4e-thread
mu4e-actions mu4e-compose mu4e-draft gnus-msg mu4e-search mu4e-lists
mu4e-bookmarks mu4e-mark mu4e-labels mu4e-message flow-fill
mu4e-contacts mu4e-update mu4e-folders mu4e-context mu4e-query-items
mu4e-server mu4e-modeline mu4e-vars mu4e-helpers mu4e-config mu4e-window
bookmark mu4e-obsolete yaml yaml-autoloads emacsql-sqlite
emacsql-sqlite-common emacsql emacsql-compiler emacsql-autoloads
xeft-autoloads org-duration oc-basic ol-eww eww ol-rmail ol-mhe ol-irc
ol-info ol-gnus nnselect gnus-art mm-uu mml2015 mm-view mml-smime smime
gnutls dig gnus-sum shr pixel-fill kinsoku gnus-group gnus-undo
gnus-start gnus-dbus dbus gnus-cloud nnimap nnmail mail-source utf7 nnoo
parse-time gnus-spec gnus-int gnus-range message sendmail yank-media
puny rfc822 mml mml-sec epa epg rfc6068 epg-config mm-decode mm-bodies
mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev
gmm-utils mailheader gnus-win ol-docview doc-view jka-compr image-mode
exif dired dired-loaddefs ol-bibtex ol-bbdb ol-w3m ol-doi org-link-doi
org-agenda org-element org-persist xdg org-id avl-tree generator appt
diary-lib diary-loaddefs org-timeblock compat-macs svg dom xml
org-timeblock-autoloads svg-autoloads rg-org completing-read-keymaps
transient llama cond-let transient-autoloads llama-autoloads
cond-let-autoloads bibretrieve-base reftex-sel reftex-cite reftex
reftex-loaddefs reftex-vars bibretrieve bibretrieve-autoloads
bibtex-completion org-capture org-refile smartparens-org org ob
ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-src sh-script smie
treesit executable ob-comint org-element-ast inline org-pcomplete
pcomplete comint ansi-osc ansi-color ring org-list org-footnote
org-faces org-entities noutline outline ob-emacs-lisp ob-core ob-eval
org-cycle org-table ol org-fold org-fold-core org-keys oc org-compat
org-loaddefs find-func cal-menu calendar cal-loaddefs org-version
org-macs format-spec biblio biblio-download biblio-dissemin biblio-ieee
biblio-hal biblio-dblp biblio-crossref biblio-arxiv timezone biblio-doi
biblio-core url-queue url-file ido hl-line browse-url url url-proxy
url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util url-parse auth-source eieio
eieio-core password-cache url-vars mailcap biblio-autoloads
biblio-core-autoloads f f-autoloads parsebib parsebib-autoloads
pdf-tools-autoloads let-alist-autoloads tablist-autoloads bibtex iso8601
tex-parens tex-parens-autoloads bratex latex-edit-fns rg-latex json map
mm-url gnus nnheader gnus-util text-property-search time-date mail-utils
range mm-util mail-prsvr auctex-autoloads tex-site
embark-consult-autoloads embark-autoloads consult-dir-autoloads
consult-autoloads rg-project project vertico-prescient
vertico-prescient-autoloads prescient char-fold prescient-autoloads
vertico compat compat-31 vertico-autoloads compat-autoloads rg-selection
markdown-mode-autoloads csv-mode-autoloads expand-region-autoloads
fancy-dabbrev popup dabbrev fancy-dabbrev-autoloads popup-autoloads
yasnippet yasnippet-autoloads move-text-autoloads smartparens-config
smartparens-text smartparens advice loadhist thingatpt dash
smartparens-autoloads goto-chg-autoloads vundo-autoloads
whole-line-or-region whole-line-or-region-autoloads use-package-diminish
avy-autoloads finder-inf rg-editing rg-utilities remember
dired-ranger-autoloads dired-subtree-autoloads dired-narrow-autoloads
dired-hacks-utils-autoloads dash-autoloads visual-fill-column
visual-fill-column-autoloads spatial-navigate-autoloads savehist recentf
tree-widget edmacro kmacro byte-opt use-package-bind-key bind-key
diminish diminish-autoloads s s-autoloads so-long autorevert filenotify
easy-mmode display-fill-column-indicator time rg-basics server
continuum-theme rg-theme let-alist use-package-core derived pcase
use-package-autoloads info bind-key-autoloads straight-autoloads
straight cl-macs cus-edit pp cus-load wid-edit comp cl-seq comp-cstr
cl-extra help-mode warnings icons subr-x gv cl-loaddefs cl-lib comp-run
bytecomp byte-compile comp-common rx rmc iso-transl tooltip cconv eldoc
paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode
mwheel term/ns-win ns-win ucs-normalize mule-util term/common-win
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar
rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock
font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq
simple cl-generic indonesian philippine cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese composite emoji-zwj charscript charprop case-table
epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button
loaddefs theme-loaddefs faces cus-face macroexp files window
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget keymap hashtable-print-readable backquote threads kqueue
cocoa ns lcms2 multi-tty make-network-process native-compile emacs)
Memory information:
((conses 16 1477616 1245879) (symbols 48 59993 43)
(strings 32 376006 44478) (string-bytes 1 14782567)
(vectors 16 113794) (vector-slots 8 2327069 407593)
(floats 8 19502 42240) (intervals 56 72932 15945) (buffers 992 92))
Richard Garner <richard.garner@HIDDEN>:bug-gnu-emacs@HIDDEN.
Full text available.bug-gnu-emacs@HIDDEN:bug#81619; Package emacs.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.