GNU bug report logs - #81894
31.1.50; multi-tty: new emacsclient connection can cause other terminal's minibuffer commands to open on the wrong frame

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs; Reported by: Len Trigg <lenbok@HIDDEN>; dated Sat, 19 Sep 2026 06:31:02 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

Message received at 81894 <at> debbugs.gnu.org:


Received: (at 81894) by debbugs.gnu.org; 20 Sep 2026 04:43:00 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Sep 20 00:43:00 2026
Received: from localhost ([127.0.0.1]:49168 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1x89OF-0004Gz-LD
	for submit <at> debbugs.gnu.org; Sun, 20 Sep 2026 00:43:00 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:42300)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1x89OD-0004GN-Mf
 for 81894 <at> debbugs.gnu.org; Sun, 20 Sep 2026 00:42:58 -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 1x89O7-0007L1-G6; Sun, 20 Sep 2026 00:42:51 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
 Date; bh=v0IiNPfDvbLNKZUp4rI3O+su9a2NTyE74ZR2r5stDL8=; b=OQ1rHeVBYwPGj9BCh+Wc
 ZK4AK5hKd2IVmKMg5MDb9aZr27syyVqRhFfMpURD61pron6M9NA6HkkqV+UobcxYi+Budr4Jx4XFg
 MWx6Ri9b5a8VUW8T/QDtQ9bK2YBY+Ek96Fl3b+/nft7ssRKWDPvuw+RXyLLPudDzuyqU6RVMTZYM4
 T7JiwL6140cUR1n7VLcqTT8xh4QH3L/1LMZsC0b5r30TO34YNqba+Lses3kwJXBVhZ6DBR8964xzf
 12bTCN4a0TAhwKCOf6fffdUrrgpk/gWYcGA9myH/8gJWLCTCBsgDhVl8RNaWF2jyxe4OSU2Z5fpSB
 v4HKCcwwTcmKjQ==;
Date: Sun, 20 Sep 2026 07:42:48 +0300
Message-Id: <86eceoh6t3.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Len Trigg <lenbok@HIDDEN>, Stefan Monnier <monnier@HIDDEN>,
 martin rudalics <rudalics@HIDDEN>
In-Reply-To: <CAOGVweno6ECAz7yjEG0UVSEBizA9u-W0Qby0aJdJ6y2HUQ_vqA@HIDDEN>
 (message from Len Trigg on Sun, 20 Sep 2026 08:36:09 +1200)
Subject: Re: bug#81894: 31.1.50; multi-tty: new emacsclient connection can
 cause other terminal's minibuffer commands to open on the wrong frame
References: <CAOGVwek4rRpPZSg=GCi5Sf-6o43iGaUiFBPcMw9Z14Ag6jYcdg@HIDDEN>
 <861papirdb.fsf@HIDDEN>
 <CAOGVwek5SbcGiVT8Ay5boE4v2wqqqmi3d1qqc1Xchhq5pLDJJg@HIDDEN>
 <86y0cxham9.fsf@HIDDEN>
 <CAOGVwenU_snBEhqGLE0CN7iKfiPvhMLq_ZAcOM+AxRjutNtZFw@HIDDEN>
 <CAOGVwe=WWygY4GUQ3GVA=378quf0buE2nPSqXaQ0JRvjWN9JHA@HIDDEN>
 <CAOGVweno6ECAz7yjEG0UVSEBizA9u-W0Qby0aJdJ6y2HUQ_vqA@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 81894
Cc: gerd.moellmann@HIDDEN, 81894 <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: -3.3 (---)

> From: Len Trigg <lenbok@HIDDEN>
> Date: Sun, 20 Sep 2026 08:36:09 +1200
> Cc: 81894 <at> debbugs.gnu.org, Gerd Möllmann <gerd.moellmann@HIDDEN>
> 
> Apologies, I hadn't tested the last patch cleanly, and it turns out I was testing with my main emacs config (into
> which I had already put a lisp-based workaround that advised server functions). The attached patch puts the
> initialization of never_focused_p in the right place.
> 
> Cheers,
> Len.
> 
> On Sun, 20 Sept 2026 at 08:15, Len Trigg <lenbok@HIDDEN> wrote:
> 
>  Cc:ing Gerd, who added the conditional I'm modifying in the attached patch.
> 
>  Although my bug report mentioned the minibuffer, it turns out the bug is actually not tied to minibuffer in
>  any way. An alternate demonstration:
> 
>  To reproduce, first arrange two terminals side by side.
> 
>  Start emacs in one terminal:
>   
>  emacs -nw -Q /tmp/foo.txt
>  M-x server-start RET
> 
>  In the second terminal, connect a client, but do not send it input:
> 
>  emacsclient -nw
> 
>  Back in the first terminal (the original emacs -nw), type whatever you like, and observe the text going into
>  the other terminal (emacsclient, on *scratch*), instead of the original terminal where you are typing.
> 
>  This is exactly the kind of phenomenon that the comment around line 2060 in src/frame.c warns us about:
> 
>    /* We want to make sure that the next event generates a frame-switch
>       event to the appropriate frame.  This seems kludgy to me, but
>       before you take it out, make sure that evaluating something like
>       (select-window (frame-root-window (make-frame))) doesn't end up
>       with your typing being interpreted in the new frame instead of
>       the one you're actually typing in.  */
> 
>  Attached is a small patch that fixes this bug. It works by not skipping the clearing of
>  internal_last_event_frame only for brand new frames that haven't had keyboard input. It should therefore
>  not reintroduce the issue described in the comment immediately following (regarding invokation via
>  post-command-hook, possibly involving vertico-posframe). I haven't seen any problems with
>  vertico-posframe, but if there is a specific test I should try to reproduce, please let me know.
> 
>  Cheers,
>  Len.
> 
>  On Sat, 19 Sept 2026 at 21:25, Len Trigg <lenbok@HIDDEN> wrote:
> 
>  On Sat, 19 Sept 2026 at 21:08, Eli Zaretskii <eliz@HIDDEN> wrote:
> 
>  Yes.  For the same reason: the connection of the second client made
>  its frame be selected for input.
> 
>  Emacs cannot select the frame for input when input actually arrives,
>  because it's too late.
> 
>  I do not understand that. How does emacs select any (tty?) frame for input when keys are typed
>  then?
> 
>  Note that the behaviour is different if the sequence is like this:
> 
>  emacs -nw -Q
>  M-x server-start RET
> 
>  In a second terminal, connect a client, but then exit it:
> 
>  emacsclient -nw
>  C-x 5 0 RET
> 
>  Immediately start a new client from that same terminal, but do not give it input:
> 
>  emacsclient -nw
> 
>  Back in the first terminal (the original emacs -nw), invoke any command
>  that reads from the minibuffer, e.g.:
> 
>  M-x
> 
>  Now the minibuffer does appear in the emacs being typed into (as I would expect, but apparently
>  not you).
> 
>  Cheers,
>  Len.

Thanks.  However, I have a bad feeling about this kind of flag.  E.g.,
it assumes that a frame can get focus only by a keyboard event, but is
that true when the terminal is displayed by a terminal emulator
running on a window-system? there could be input-focus events there
handled by the terminal emulator itself, not by Emacs.  Or what about
the case that some processing shows some prompt on that frame --
shouldn't that get the input focus?

I've added to the discussion other people who could have comments and
ideas about this.

> From 9af9baeec3239597d495158bb09ff057787227be Mon Sep 17 00:00:00 2001
> From: Lenbok <lenbok@HIDDEN>
> Date: Sun, 20 Sep 2026 00:33:29 +1200
> Subject: [PATCH] Try adding a flag to indicate new frame creation
> 
> ---
>  src/frame.c    | 6 ++++--
>  src/frame.h    | 3 +++
>  src/keyboard.c | 2 ++
>  3 files changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/src/frame.c b/src/frame.c
> index e6321268e2f..84178146230 100644
> --- a/src/frame.c
> +++ b/src/frame.c
> @@ -1195,6 +1195,7 @@ make_frame (bool mini_p)
>    f->skip_taskbar = false;
>    f->no_focus_on_map = false;
>    f->no_accept_focus = false;
> +  f->never_focused_p = true;
>    f->z_group = z_group_none;
>    f->tooltip = false;
>    f->was_invisible = false;
> @@ -2086,8 +2087,9 @@ do_switch_frame (Lisp_Object frame, int track, int for_deletion, Lisp_Object nor
>       and executes, which again runs post-command-hook etc., ad
>       infinitum.
>  
> -     Let's not do that for now on ttys.  */
> -  if (!is_tty_frame (f))
> +     Let's not do that for now on ttys, unless we know the frame has
> +     never had focus (and thus we did not get via post-command-hook). */
> +  if (!(is_tty_frame (f) && !f->never_focused_p))
>      if (!frame_ancestor_p (f, sf))
>        internal_last_event_frame = Qnil;
>  
> diff --git a/src/frame.h b/src/frame.h
> index 091b112e8b9..16e9297054f 100644
> --- a/src/frame.h
> +++ b/src/frame.h
> @@ -452,6 +452,9 @@ #define EMACS_FRAME_H
>       via mouse clicks or by moving the mouse into it.  */
>    bool_bf no_accept_focus : 1;
>  
> +  /* True until this frame has processed at least one real keyboard event. */
> +  bool_bf never_focused_p : 1;
> +
>  #ifdef HAVE_WINDOW_SYSTEM
>    /* True if this frame is a tooltip frame.  */
>    bool_bf tooltip : 1;
> diff --git a/src/keyboard.c b/src/keyboard.c
> index b1d14ef1a25..df99c7fbc89 100644
> --- a/src/keyboard.c
> +++ b/src/keyboard.c
> @@ -4369,6 +4369,8 @@ kbd_buffer_get_event (KBOARD **kbp,
>  	      && !EQ (frame, selected_frame))
>  	    obj = make_lispy_switch_frame (frame);
>  	  internal_last_event_frame = frame;
> +	  if (FRAMEP (frame))
> +	    XFRAME (frame)->never_focused_p = false;
>  
>  	  if (EQ (event->ie.device, Qt))
>  	    Vlast_event_device = ((event->ie.kind == ASCII_KEYSTROKE_EVENT
> -- 
> 2.53.0
> 




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#81894; Package emacs. Full text available.

Message received at 81894 <at> debbugs.gnu.org:


Received: (at 81894) by debbugs.gnu.org; 20 Sep 2026 04:39:22 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Sep 20 00:39:22 2026
Received: from localhost ([127.0.0.1]:48390 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1x89Kj-0003mV-A9
	for submit <at> debbugs.gnu.org; Sun, 20 Sep 2026 00:39:22 -0400
Received: from mail-wm2-x11.google.com ([2a00:1450:4864:31::11]:50528)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <gerd.moellmann@HIDDEN>)
 id 1x89Kf-0003l1-LT
 for 81894 <at> debbugs.gnu.org; Sun, 20 Sep 2026 00:39:19 -0400
Received: by mail-wm2-x11.google.com with SMTP id
 5b1f17b1804b1-49cd4ba9f68so26872105e9.1
 for <81894 <at> debbugs.gnu.org>; Sat, 19 Sep 2026 21:39:17 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20251104; t=1789879151; x=1790483951; darn=debbugs.gnu.org;
 h=content-type:mime-version:user-agent:message-id:date:references
 :in-reply-to:subject:cc:to:from:from:to:cc:subject:date:message-id
 :reply-to:content-type;
 bh=OmnQVTeTxXgYsmgr8A2hExI93b9Gzlh/ZltFyjPKEkw=;
 b=NnkBkZOoiBaWoubgHWE0i73FYZmF4L5Wj9wBwQkyl4BaA8SOMZor3a6xr5WzjHG1Od
 FUAxvMKlPykjTw+xupMd+kGDMroUKsGMQG4n9DD8CEbIg5uOxuo0Be9BXIm9FGyUVo3I
 m9oDX5tgT9H1e5/uBe+t16lUQ63O/SZaAG3s6En2qiFf4ekwplEwMyorebrjLw3NMoOT
 pMBGrUceTAu2c+DTLPWNwKWKG10z8qjCDmyt+628KmOvJ8t7YNR/uGge8NM6dND3rZhR
 i6gqVGtmWnxtFDh+ZBFiRpcGXNa708OOuYcGrMapbJdbFDJjXZXI7sGy0nKPiI69wqIn
 USgA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20260707; t=1789879151; x=1790483951;
 h=content-type:mime-version:user-agent:message-id:date:references
 :in-reply-to:subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to
 :cc:subject:date:message-id:reply-to:content-type;
 bh=OmnQVTeTxXgYsmgr8A2hExI93b9Gzlh/ZltFyjPKEkw=;
 b=oyI0HjMtORZ3wMK9ObHJ5VhOoWm4AwqyCrjtsnWNgdYFYBM0Ple7HCek6G1j9/6gyL
 cJGAYVHsEg2DZ2DvyQHucysdxTGXuIVhwSiJXEY92qKj5OAYz6HJPgGSGacyV6ekO+eS
 +tNycy+LZZan9VS+NX7dqfcVE4qONfxt8xIXVTsVlf5F7YYN5mWH0AH0aWnFfWiw98Fl
 ES2ZP/TbNxIyW7A+qKf1IwJhoTtxw+ExL0QA5hsKOpXU1RTN//MEGalFmY53qIjN+5K4
 S986CrXwtPMyo8l2Zhe+1X3/Algf7KMDmUVtvoHtyKsQ2bfix5FUJR6qhUFHo9D/1/8k
 GaQw==
X-Forwarded-Encrypted: i=1;
 AKwUvBx8s0NyYGoLID9rRtRaXxLhdjfCkwxfm1YoSOhVzMBsidbqm9VYEi3dGOK3Xmkuw9qn6HN4Fw==@debbugs.gnu.org
X-Gm-Message-State: AFuF++m4Z0UyAMKm9mW8IZwj1Q8Z6gDHgCnoknhcaBpfcLMz6CF7knhJ
 0FP36DTfK9DjNRIBKXhiSxuwHNypOmUYcGC1wpbdm1A/Wd7MOV/za7tFBrLtng==
X-Gm-Gg: AYBFou13oV6syIwer2a8Inq3TPcaAVzUpiaDOxVqVC2PPOhv1wy+HU9kgyWj5BfkXfO
 mkpfTwIC0tP59NxkP3LKJLy30WtK+gozjRrFWHw/uIZq4+q3UIwdSHbYQS99CgiMqdBuYZAOsbJ
 ayM0kkv9PsFo/68ZpSe8XN+++wwhL95reFc++Y0hXgpi8hpPvbFS8zW9IZxx7oUb640VKv30mNg
 1mJMAYT/ZlSDZpdxFWsK9N11Vpn5LoIqrGFDS+QUtTzNMsQYra1ALkVYaR9AVrHSgszfa2D0hq/
 uKJCheGyURjkdlWyJ1dDq80KNJUgBlrVyxUJyCJOzGITpDLT9dlUZQs1Lmw2CHnjyE3q/QUa6RU
 VlY4HTuqTwDAScvWU2AMaJUfz+Q7fHrFL0iQRBUiRXC+qde4ZfPi/0NnODxFhnDlFt42TqX5CvA
 GRS+jjzZnJ6F5g2N2dBYkK5dnQoWu2UyeoXjiWNe+590vwIvzsL1NpduT3u1vTltqTC482o6Ado
 c3Cw7yep524pnhnt9EXw5vZW2AxkP3x3ziR0H/rSSdq3k91oE9vdDyv1uXPsUSzu7u89rQLbfDR
 Q8cWrdU=
X-Received: by 2002:a05:600c:81c5:b0:49d:1a02:4797 with SMTP id
 5b1f17b1804b1-49fc5737cd1mr85183745e9.17.1789879151201; 
 Sat, 19 Sep 2026 21:39:11 -0700 (PDT)
Received: from pro4 (p200300e0b7165700c9f55db078d3b0a8.dip0.t-ipconnect.de.
 [2003:e0:b716:5700:c9f5:5db0:78d3:b0a8])
 by smtp.gmail.com with ESMTPSA id
 5b1f17b1804b1-49fcd068059sm122544775e9.5.2026.09.19.21.39.09
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Sat, 19 Sep 2026 21:39:10 -0700 (PDT)
From: =?utf-8?Q?Gerd_M=C3=B6llmann?= <gerd.moellmann@HIDDEN>
To: Len Trigg <lenbok@HIDDEN>
Subject: Re: bug#81894: 31.1.50; multi-tty: new emacsclient connection can
 cause other terminal's minibuffer commands to open on the wrong frame
In-Reply-To: <CAOGVweno6ECAz7yjEG0UVSEBizA9u-W0Qby0aJdJ6y2HUQ_vqA@HIDDEN>
References: <CAOGVwek4rRpPZSg=GCi5Sf-6o43iGaUiFBPcMw9Z14Ag6jYcdg@HIDDEN>
 <861papirdb.fsf@HIDDEN>
 <CAOGVwek5SbcGiVT8Ay5boE4v2wqqqmi3d1qqc1Xchhq5pLDJJg@HIDDEN>
 <86y0cxham9.fsf@HIDDEN>
 <CAOGVwenU_snBEhqGLE0CN7iKfiPvhMLq_ZAcOM+AxRjutNtZFw@HIDDEN>
 <CAOGVwe=WWygY4GUQ3GVA=378quf0buE2nPSqXaQ0JRvjWN9JHA@HIDDEN>
 <CAOGVweno6ECAz7yjEG0UVSEBizA9u-W0Qby0aJdJ6y2HUQ_vqA@HIDDEN>
Date: Sun, 20 Sep 2026 06:39:09 +0200
Message-ID: <m25x00h6z6.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 81894
Cc: Eli Zaretskii <eliz@HIDDEN>, 81894 <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: 0.0 (/)

Len Trigg <lenbok@HIDDEN> writes:

> Apologies, I hadn't tested the last patch cleanly, and it turns out I was testing with my main emacs config (into which I had
> already put a lisp-based workaround that advised server functions). The attached patch puts the initialization of never_focused_p
> in the right place.
>
> Cheers,
> Len.
>
> On Sun, 20 Sept 2026 at 08:15, Len Trigg <lenbok@HIDDEN> wrote:
>
>  Cc:ing Gerd, who added the conditional I'm modifying in the attached patch.

I still do not understand this, as I said in the long comment there.
I'm also not using Emacs much these days, so I can't really meaningfully
test it.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#81894; Package emacs. Full text available.

Message received at 81894 <at> debbugs.gnu.org:


Received: (at 81894) by debbugs.gnu.org; 19 Sep 2026 20:36:42 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 19 16:36:41 2026
Received: from localhost ([127.0.0.1]:52851 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1x81nc-0007tj-Mc
	for submit <at> debbugs.gnu.org; Sat, 19 Sep 2026 16:36:41 -0400
Received: from mail-lf2-x10.google.com ([2a00:1450:4864:36::10]:40061)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <lenbok@HIDDEN>) id 1x81nY-0007sS-71
 for 81894 <at> debbugs.gnu.org; Sat, 19 Sep 2026 16:36:38 -0400
Received: by mail-lf2-x10.google.com with SMTP id
 2adb3069b0e04-5b76ff64d78so1704661e87.1
 for <81894 <at> debbugs.gnu.org>; Sat, 19 Sep 2026 13:36:36 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1789850190; cv=none;
 d=google.com; s=arc-20260327;
 b=gM73MZyatdXt9AEXxt9y6m1x62WVAmnfYa1vu2QUI79LEcFx2FKuNpQLuwxZvRq1YE
 xjI5PXFHCCVvnk56QQttIhAPDWVoW6Qu7zuvlrQJ5UJpnBOgDXT2+oWALN5Zt+VHPJKJ
 hoxvzvOZPpqwJmIdgtoZZC+CttInd2XGDit8FRV5GupDrD5yPWRxAEEIgXlbDu8p0KGZ
 uxek9uEFsE5FGoqSmqTwKMu2nDNP3QO2U2oYuXrT0kt5rm/ldpSayhglZa4K2e30eYYC
 q0AAO+BrFjELeTf/7kFejyK420Cwm+9bf4xD9OS0tlFgK4satTa5aXWhUiP8iKWiFcmc
 +KHQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;
 s=arc-20260327; 
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:dkim-signature;
 bh=ykk72/JtsyCN28HyOOAk9zTFiJnUm4igso0/D32TeaI=;
 fh=6oFc/YmyzVJ5AmA+OGA1gfMNzXWNC512uv+QePLR9wQ=;
 b=FkEPU1xpzPfP8EcxNzIlQIMGAsWlrs5h4yOInA+/9VcJIPkiEgjCg3sbx3pIHJ5n2J
 yQOpQgxYR6oSuAtKDm+ddmCoT+9EqiFULNyIDiAiaz5F/pFxlLdahzzyvjNBPXhcb0pS
 j56xSJckt6KpOojlsrUffvB6SAClxKBiEahg/RHHJp45IT4L1cniPPgelrnxkA8veVet
 0HBRQM68qGkoullvu0uJIDNcHPJpc+mxUSUDPd/gvRToPCaP4lxVOl1ZcTOCFB/L9Vd/
 nRWH+muJ5O7VCKz9Di8r394BbdABvQWbdnAFKzXKoB4bqCN+ONrgc5gSF7imzOlQG+oM
 xE/w==; darn=debbugs.gnu.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20251104; t=1789850190; x=1790454990; darn=debbugs.gnu.org;
 h=content-type:cc:to:subject:message-id:date:from:in-reply-to
 :references:mime-version:from:to:cc:subject:date:message-id:reply-to
 :content-type; bh=ykk72/JtsyCN28HyOOAk9zTFiJnUm4igso0/D32TeaI=;
 b=TdwYK9YX1bKVe8YMPjd1XfkUJEtx3/0Q5Pf0MH6oFEOKqLz1OYZOgLLfOkQOiebUlx
 8O/d2sinOHxyp+t21QJpj/vALL2sdPppqeDyHPAx0GVxLLpKn5U3bRISj99MvFC3kfPE
 bx2maTwgAaecTmbtJuO9eKTt6ALlNv8n2lhLdO77QYCYmE3ADoxZKuD8t6j7EFJfIOKH
 b5ITjsKNVgKo4RRXNwYCY+J9DJjc1rof7WKEmhuL4L13+A6OZ3Slyb8bI3Ieo/5XIkHT
 /d13LAkCXkIVcacU+jfqteo++TolysGRZ4N0swClIpKNrFutpmPSTUCmVq4iDe4g4ghB
 fTwA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20260707; t=1789850190; x=1790454990;
 h=content-type:cc:to:subject:message-id:date:from:in-reply-to
 :references:mime-version:x-gm-gg:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to:content-type;
 bh=ykk72/JtsyCN28HyOOAk9zTFiJnUm4igso0/D32TeaI=;
 b=odRO14bLqV0TRcOxjaR7YVsBtN5dZZC0rUwfMTaRj8VYseSbQdq5cBXNXbvDiHF6XG
 Zui3nfmUGBZsmHPFM3pdeQHeN34j2MZwqMWzlFVxct/7aKVFY7+anwUvB3KVLagpteFA
 h2+xAh2rfDubED9x1jfGCeEPp0CGAvpQNGb/fZw2dBnZ2OOmM++2LsisawMJiKvsvtJu
 frpeECJXygnk3AS+a0u9vmgt/8+2UnS1jhdWE++pcA6W5tAAqaZICoZAeYM8jeTYeXp1
 Yg8zC57I8C0uuKeryaFmlGKK0r2cwpHMRHiSuf7jAH9TYTXRYgJn971G2aWlScRcAXiW
 dv/g==
X-Gm-Message-State: AFuF++kG7eBYsdOZiQucUeZDLHkiKcyYjpSjZ3gln/5eFCE/VT1MCR5c
 gS9sEvjDkWBkD2CrnQZdOFfPkF39BLsLjCn1fggukoBbGmHwyiR7rgHdCQ3ocYynetllTseMZXD
 QQDvAffAOT9sZ24V0pEOaiWnP+/Qe/sE=
X-Gm-Gg: AYBFou24UyNpAEUZ4fQ86uUXiOKDjyDgwGJncciD0icW6GTKWvj1xZ1O5dRKV0Qbigw
 cfOWX7o3H7qRv6Ld13ieA64Llbsj46Qt+EhGTrf/z+C8x8ePdoh8x62uo3S99FuAh0OZX/EU4HQ
 madedgI/4k9ET6IM4T5jrHxZYb2g/uHFMnrf4VccNI8oDIjcWV7cnOx2roa1UYhrGNv/YsPJzGT
 JC7pzb5CijtSFr2j1qeJ/RNoy3dPDd42/AdFsRPRs5uVrNUJo5N7SCaM0avil6qqdZxOX1VHr+c
 j37FK9GbUeUU91aaWbDocRD36HBuUxBOZLFnHAdCzMd26Za+Movd8nSY
X-Received: by 2002:a05:6512:3e1a:b0:5b6:1a7c:59e4 with SMTP id
 2adb3069b0e04-5b8c19535b0mr1892594e87.62.1789850189367; Sat, 19 Sep 2026
 13:36:29 -0700 (PDT)
MIME-Version: 1.0
References: <CAOGVwek4rRpPZSg=GCi5Sf-6o43iGaUiFBPcMw9Z14Ag6jYcdg@HIDDEN>
 <861papirdb.fsf@HIDDEN>
 <CAOGVwek5SbcGiVT8Ay5boE4v2wqqqmi3d1qqc1Xchhq5pLDJJg@HIDDEN>
 <86y0cxham9.fsf@HIDDEN>
 <CAOGVwenU_snBEhqGLE0CN7iKfiPvhMLq_ZAcOM+AxRjutNtZFw@HIDDEN>
 <CAOGVwe=WWygY4GUQ3GVA=378quf0buE2nPSqXaQ0JRvjWN9JHA@HIDDEN>
In-Reply-To: <CAOGVwe=WWygY4GUQ3GVA=378quf0buE2nPSqXaQ0JRvjWN9JHA@HIDDEN>
From: Len Trigg <lenbok@HIDDEN>
Date: Sun, 20 Sep 2026 08:36:09 +1200
X-Gm-Features: AcwNN1Waye6nizrl04gTTYLTYzIaLoBo6IFObx4edpaE6fAU5MMhf0a9fvB2dY4
Message-ID: <CAOGVweno6ECAz7yjEG0UVSEBizA9u-W0Qby0aJdJ6y2HUQ_vqA@HIDDEN>
Subject: Re: bug#81894: 31.1.50; multi-tty: new emacsclient connection can
 cause other terminal's minibuffer commands to open on the wrong frame
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: multipart/mixed; boundary="000000000000bd2ff4065bdbf886"
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 81894
Cc: =?UTF-8?Q?Gerd_M=C3=B6llmann?= <gerd.moellmann@HIDDEN>,
 81894 <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: 0.0 (/)

--000000000000bd2ff4065bdbf886
Content-Type: multipart/alternative; boundary="000000000000bd2ff1065bdbf884"

--000000000000bd2ff1065bdbf884
Content-Type: text/plain; charset="UTF-8"

Apologies, I hadn't tested the last patch cleanly, and it turns out I was
testing with my main emacs config (into which I had already put a
lisp-based workaround that advised server functions). The attached patch
puts the initialization of never_focused_p in the right place.

Cheers,
Len.


On Sun, 20 Sept 2026 at 08:15, Len Trigg <lenbok@HIDDEN> wrote:

> Cc:ing Gerd, who added the conditional I'm modifying in the attached patch.
>
> Although my bug report mentioned the minibuffer, it turns out the bug is
> actually not tied to minibuffer in any way. An alternate demonstration:
>
> To reproduce, first arrange two terminals side by side.
>
> Start emacs in one terminal:
>
> emacs -nw -Q /tmp/foo.txt
> M-x server-start RET
>
> In the second terminal, connect a client, but do not send it input:
>
> emacsclient -nw
>
> Back in the first terminal (the original emacs -nw), type whatever you
> like, and observe the text going into the other terminal (emacsclient, on
> *scratch*), instead of the original terminal where you are typing.
>
> This is exactly the kind of phenomenon that the comment around line 2060
> in src/frame.c warns us about:
>
>   /* We want to make sure that the next event generates a frame-switch
>      event to the appropriate frame.  This seems kludgy to me, but
>      before you take it out, make sure that evaluating something like
>      (select-window (frame-root-window (make-frame))) doesn't end up
>      with your typing being interpreted in the new frame instead of
>      the one you're actually typing in.  */
>
> Attached is a small patch that fixes this bug. It works by not skipping
> the clearing of internal_last_event_frame only for brand new frames that
> haven't had keyboard input. It should therefore not reintroduce the issue
> described in the comment immediately following (regarding invokation via
> post-command-hook, possibly involving vertico-posframe). I haven't seen any
> problems with vertico-posframe, but if there is a specific test I should
> try to reproduce, please let me know.
>
> Cheers,
> Len.
>
> On Sat, 19 Sept 2026 at 21:25, Len Trigg <lenbok@HIDDEN> wrote:
>
>>
>> On Sat, 19 Sept 2026 at 21:08, Eli Zaretskii <eliz@HIDDEN> wrote:
>>
>>> Yes.  For the same reason: the connection of the second client made
>>> its frame be selected for input.
>>>
>>> Emacs cannot select the frame for input when input actually arrives,
>>> because it's too late.
>>>
>>
>> I do not understand that. How does emacs select any (tty?) frame for
>> input when keys are typed then?
>>
>> Note that the behaviour is different if the sequence is like this:
>>
>> emacs -nw -Q
>> M-x server-start RET
>>
>> In a second terminal, connect a client, but then exit it:
>>
>> emacsclient -nw
>> C-x 5 0 RET
>>
>> Immediately start a new client from that same terminal, but do not give
>> it input:
>>
>> emacsclient -nw
>>
>> Back in the first terminal (the original emacs -nw), invoke any command
>> that reads from the minibuffer, e.g.:
>>
>> M-x
>>
>> Now the minibuffer does appear in the emacs being typed into (as I would
>> expect, but apparently not you).
>>
>> Cheers,
>> Len.
>>
>>

--000000000000bd2ff1065bdbf884
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>Apologies, I hadn&#39;t tested the last patch cleanly=
, and it turns out I was testing with my main emacs config (into which I ha=
d already=C2=A0put a lisp-based workaround that advised server functions). =
The attached patch puts the initialization of never_focused_p in the right =
place.</div><div><br></div><div>Cheers,</div><div>Len.</div><div><br></div>=
</div><br><div class=3D"gmail_quote gmail_quote_container"><div dir=3D"ltr"=
 class=3D"gmail_attr">On Sun, 20 Sept 2026 at 08:15, Len Trigg &lt;<a href=
=3D"mailto:lenbok@HIDDEN">lenbok@HIDDEN</a>&gt; wrote:<br></div><bloc=
kquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:=
1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"><div>Cc:ing G=
erd, who added the conditional I&#39;m modifying in the attached patch.</di=
v><div><br></div><div>Although my bug report mentioned the minibuffer, it t=
urns out the bug is actually not tied to minibuffer in any way. An alternat=
e demonstration:</div><div><br></div><div>To reproduce, first arrange two t=
erminals side by side.</div><div><br></div><div>Start emacs in one terminal=
:<br>=C2=A0<br>emacs -nw -Q /tmp/foo.txt<br>M-x server-start RET<br><br>In =
the second terminal, connect a client, but do not send it input:<br><br>ema=
csclient -nw<br><br>Back in the first terminal (the original emacs -nw), ty=
pe whatever you like, and observe the text going into the other terminal (e=
macsclient, on *scratch*), instead of the original terminal where you are t=
yping.</div><div><br></div><div>This is exactly the kind of phenomenon that=
 the comment around line 2060 in src/frame.c warns us about:</div><div><br>=
</div><div>=C2=A0 /* We want to make sure that the next event generates a f=
rame-switch<br>=C2=A0 =C2=A0 =C2=A0event to the appropriate frame.=C2=A0 Th=
is seems kludgy to me, but<br>=C2=A0 =C2=A0 =C2=A0before you take it out, m=
ake sure that evaluating something like<br>=C2=A0 =C2=A0 =C2=A0(select-wind=
ow (frame-root-window (make-frame))) doesn&#39;t end up<br>=C2=A0 =C2=A0 =
=C2=A0with your typing being interpreted in the new frame instead of<br>=C2=
=A0 =C2=A0 =C2=A0the one you&#39;re actually typing in. =C2=A0*/<br><br></d=
iv><div>Attached is a small patch that fixes this bug. It works by not skip=
ping the clearing of internal_last_event_frame only for brand new frames th=
at haven&#39;t had keyboard input. It should therefore not reintroduce the =
issue described in the comment immediately following (regarding invokation =
via post-command-hook, possibly involving vertico-posframe). I haven&#39;t =
seen any problems with vertico-posframe, but if there is a specific test I =
should try to reproduce, please let me know.</div><div><br></div><div>Cheer=
s,</div><div>Len.</div></div><br><div class=3D"gmail_quote"><div dir=3D"ltr=
" class=3D"gmail_attr">On Sat, 19 Sept 2026 at 21:25, Len Trigg &lt;<a href=
=3D"mailto:lenbok@HIDDEN" target=3D"_blank">lenbok@HIDDEN</a>&gt; wro=
te:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px =
0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"=
ltr"><div dir=3D"ltr"></div><br><div class=3D"gmail_quote"><div dir=3D"ltr"=
 class=3D"gmail_attr">On Sat, 19 Sept 2026 at 21:08, Eli Zaretskii &lt;<a h=
ref=3D"mailto:eliz@HIDDEN" target=3D"_blank">eliz@HIDDEN</a>&gt; wrote:<b=
r></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex=
;border-left:1px solid rgb(204,204,204);padding-left:1ex">Yes.=C2=A0 For th=
e same reason: the connection of the second client made<br>
its frame be selected for input.<br>
<br>
Emacs cannot select the frame for input when input actually arrives,<br>
because it&#39;s too late.<br></blockquote><div><br></div><div>I do not und=
erstand that. How does emacs select any (tty?) frame for input when keys ar=
e typed then?</div><div><br></div><div>Note that the behaviour is different=
 if the sequence is like this:</div><div><br></div><div>emacs -nw -Q<br>M-x=
 server-start RET<br><br>In a second terminal, connect a client, but then e=
xit it:<br><br>emacsclient -nw</div><div>C-x 5 0 RET</div><div><br></div><d=
iv>Immediately start a new client from that same terminal, but do not give =
it input:</div><div><br></div><div><div>emacsclient -nw</div><div><br></div=
>Back in the first terminal (the original emacs -nw), invoke any command<br=
>that reads from the minibuffer, e.g.:<br><br>M-x</div><div><br></div><div>=
Now the minibuffer does appear in the emacs being typed into (as I would ex=
pect, but apparently not you).</div><div><br></div><div>Cheers,</div><div>L=
en.</div><div><br></div></div></div>
</blockquote></div>
</blockquote></div>

--000000000000bd2ff1065bdbf884--

--000000000000bd2ff4065bdbf886
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0001-Try-adding-a-flag-to-indicate-new-frame-creation.patch"
Content-Disposition: attachment; 
	filename="0001-Try-adding-a-flag-to-indicate-new-frame-creation.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mu8ukqc10>
X-Attachment-Id: f_mu8ukqc10

RnJvbSA5YWY5YmFlZWMzMjM5NTk3ZDQ5NTE1OGJiMDlmZjA1Nzc4NzIyN2JlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMZW5ib2sgPGxlbmJva0BnbWFpbC5jb20+CkRhdGU6IFN1biwg
MjAgU2VwIDIwMjYgMDA6MzM6MjkgKzEyMDAKU3ViamVjdDogW1BBVENIXSBUcnkgYWRkaW5nIGEg
ZmxhZyB0byBpbmRpY2F0ZSBuZXcgZnJhbWUgY3JlYXRpb24KCi0tLQogc3JjL2ZyYW1lLmMgICAg
fCA2ICsrKystLQogc3JjL2ZyYW1lLmggICAgfCAzICsrKwogc3JjL2tleWJvYXJkLmMgfCAyICsr
CiAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYg
LS1naXQgYS9zcmMvZnJhbWUuYyBiL3NyYy9mcmFtZS5jCmluZGV4IGU2MzIxMjY4ZTJmLi44NDE3
ODE0NjIzMCAxMDA2NDQKLS0tIGEvc3JjL2ZyYW1lLmMKKysrIGIvc3JjL2ZyYW1lLmMKQEAgLTEx
OTUsNiArMTE5NSw3IEBAIG1ha2VfZnJhbWUgKGJvb2wgbWluaV9wKQogICBmLT5za2lwX3Rhc2ti
YXIgPSBmYWxzZTsKICAgZi0+bm9fZm9jdXNfb25fbWFwID0gZmFsc2U7CiAgIGYtPm5vX2FjY2Vw
dF9mb2N1cyA9IGZhbHNlOworICBmLT5uZXZlcl9mb2N1c2VkX3AgPSB0cnVlOwogICBmLT56X2dy
b3VwID0gel9ncm91cF9ub25lOwogICBmLT50b29sdGlwID0gZmFsc2U7CiAgIGYtPndhc19pbnZp
c2libGUgPSBmYWxzZTsKQEAgLTIwODYsOCArMjA4Nyw5IEBAIGRvX3N3aXRjaF9mcmFtZSAoTGlz
cF9PYmplY3QgZnJhbWUsIGludCB0cmFjaywgaW50IGZvcl9kZWxldGlvbiwgTGlzcF9PYmplY3Qg
bm9yCiAgICAgIGFuZCBleGVjdXRlcywgd2hpY2ggYWdhaW4gcnVucyBwb3N0LWNvbW1hbmQtaG9v
ayBldGMuLCBhZAogICAgICBpbmZpbml0dW0uCiAKLSAgICAgTGV0J3Mgbm90IGRvIHRoYXQgZm9y
IG5vdyBvbiB0dHlzLiAgKi8KLSAgaWYgKCFpc190dHlfZnJhbWUgKGYpKQorICAgICBMZXQncyBu
b3QgZG8gdGhhdCBmb3Igbm93IG9uIHR0eXMsIHVubGVzcyB3ZSBrbm93IHRoZSBmcmFtZSBoYXMK
KyAgICAgbmV2ZXIgaGFkIGZvY3VzIChhbmQgdGh1cyB3ZSBkaWQgbm90IGdldCB2aWEgcG9zdC1j
b21tYW5kLWhvb2spLiAqLworICBpZiAoIShpc190dHlfZnJhbWUgKGYpICYmICFmLT5uZXZlcl9m
b2N1c2VkX3ApKQogICAgIGlmICghZnJhbWVfYW5jZXN0b3JfcCAoZiwgc2YpKQogICAgICAgaW50
ZXJuYWxfbGFzdF9ldmVudF9mcmFtZSA9IFFuaWw7CiAKZGlmZiAtLWdpdCBhL3NyYy9mcmFtZS5o
IGIvc3JjL2ZyYW1lLmgKaW5kZXggMDkxYjExMmU4YjkuLjE2ZTkyOTcwNTRmIDEwMDY0NAotLS0g
YS9zcmMvZnJhbWUuaAorKysgYi9zcmMvZnJhbWUuaApAQCAtNDUyLDYgKzQ1Miw5IEBAICNkZWZp
bmUgRU1BQ1NfRlJBTUVfSAogICAgICB2aWEgbW91c2UgY2xpY2tzIG9yIGJ5IG1vdmluZyB0aGUg
bW91c2UgaW50byBpdC4gICovCiAgIGJvb2xfYmYgbm9fYWNjZXB0X2ZvY3VzIDogMTsKIAorICAv
KiBUcnVlIHVudGlsIHRoaXMgZnJhbWUgaGFzIHByb2Nlc3NlZCBhdCBsZWFzdCBvbmUgcmVhbCBr
ZXlib2FyZCBldmVudC4gKi8KKyAgYm9vbF9iZiBuZXZlcl9mb2N1c2VkX3AgOiAxOworCiAjaWZk
ZWYgSEFWRV9XSU5ET1dfU1lTVEVNCiAgIC8qIFRydWUgaWYgdGhpcyBmcmFtZSBpcyBhIHRvb2x0
aXAgZnJhbWUuICAqLwogICBib29sX2JmIHRvb2x0aXAgOiAxOwpkaWZmIC0tZ2l0IGEvc3JjL2tl
eWJvYXJkLmMgYi9zcmMva2V5Ym9hcmQuYwppbmRleCBiMWQxNGVmMWEyNS4uZGY5OWM3ZmJjODkg
MTAwNjQ0Ci0tLSBhL3NyYy9rZXlib2FyZC5jCisrKyBiL3NyYy9rZXlib2FyZC5jCkBAIC00MzY5
LDYgKzQzNjksOCBAQCBrYmRfYnVmZmVyX2dldF9ldmVudCAoS0JPQVJEICoqa2JwLAogCSAgICAg
ICYmICFFUSAoZnJhbWUsIHNlbGVjdGVkX2ZyYW1lKSkKIAkgICAgb2JqID0gbWFrZV9saXNweV9z
d2l0Y2hfZnJhbWUgKGZyYW1lKTsKIAkgIGludGVybmFsX2xhc3RfZXZlbnRfZnJhbWUgPSBmcmFt
ZTsKKwkgIGlmIChGUkFNRVAgKGZyYW1lKSkKKwkgICAgWEZSQU1FIChmcmFtZSktPm5ldmVyX2Zv
Y3VzZWRfcCA9IGZhbHNlOwogCiAJICBpZiAoRVEgKGV2ZW50LT5pZS5kZXZpY2UsIFF0KSkKIAkg
ICAgVmxhc3RfZXZlbnRfZGV2aWNlID0gKChldmVudC0+aWUua2luZCA9PSBBU0NJSV9LRVlTVFJP
S0VfRVZFTlQKLS0gCjIuNTMuMAoK
--000000000000bd2ff4065bdbf886--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#81894; Package emacs. Full text available.

Message received at 81894 <at> debbugs.gnu.org:


Received: (at 81894) by debbugs.gnu.org; 19 Sep 2026 20:16:06 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 19 16:16:06 2026
Received: from localhost ([127.0.0.1]:45091 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1x81Tf-0004Qi-98
	for submit <at> debbugs.gnu.org; Sat, 19 Sep 2026 16:16:05 -0400
Received: from mail-lf2-x11.google.com ([2a00:1450:4864:36::11]:59143)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <lenbok@HIDDEN>) id 1x81Tb-0004Oy-HC
 for 81894 <at> debbugs.gnu.org; Sat, 19 Sep 2026 16:16:00 -0400
Received: by mail-lf2-x11.google.com with SMTP id
 2adb3069b0e04-5b8c795f805so685137e87.3
 for <81894 <at> debbugs.gnu.org>; Sat, 19 Sep 2026 13:15:59 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1789848953; cv=none;
 d=google.com; s=arc-20260327;
 b=ZodR0ZKqJdgZNwf0uyUUu2h3zOOob50s91lAVovG0Qp/K5dUe26w6IbQuEhk/NRz5s
 DDukeYu+/ENI9QI3DeVLzP1ec4yZw9VeoJBhEpBz5avgykMXQ9DGwMuWDD9hvETuG3On
 OqIxmtq0cszZU6CuqKZ1eh7io/r4b5FSaelIlL94toczGnNG0KDUKXJjlVI227N33EPZ
 ez7gAkJSv7o0pjUO1TL1HGuo9+K4DYb9yIJdPiOJaCmoM9rch9TEwQv9TY8Dmc7Av+5o
 Su5GkyrSwlU4AI/XZb2SZamFKY71Tvse6xFPjwJdWRvN8VkeCqiK/4iTztSk8lBB/sAe
 uUhA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;
 s=arc-20260327; 
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:dkim-signature;
 bh=Ub09lEbbCmf6wH3NWp8CxxFVlYoaue9/tzNcofalO1Y=;
 fh=6oFc/YmyzVJ5AmA+OGA1gfMNzXWNC512uv+QePLR9wQ=;
 b=H5uYSjUwsrzEjVRO0R5B97H6a6sw3kiSotmpaT4JRCurLDwxMnJ0Q9qhF5P5cXr7Yq
 51NnifdRjW3ddtPvsJWNCJtlhSnVY1A9ZmiE0xa1LTrfoV9+PJ2dJ102L1WvblORnBlw
 cncQdfd8vUIpdokUmqLaxB92CBxlDgsvjORZ+KXcfYgEKHastxxeekP3/i1F+y/TB87M
 cCRjDx3krbFN2W9NrJ2xj31v5ah3MU7yRMJurjQkXj2uDnU/zXEIUVhpg1bEo6dyzYbl
 HsT2RoVOt1SxrHp1T1PmclqZZ5XV0cZ/C4EaVrXIWY5ZDsuhTb4A6chJx59ODiSYPYIi
 M+gA==; darn=debbugs.gnu.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20251104; t=1789848953; x=1790453753; darn=debbugs.gnu.org;
 h=content-type:cc:to:subject:message-id:date:from:in-reply-to
 :references:mime-version:from:to:cc:subject:date:message-id:reply-to
 :content-type; bh=Ub09lEbbCmf6wH3NWp8CxxFVlYoaue9/tzNcofalO1Y=;
 b=NwgtEIxVunLvwe081WIllg9/3UCVCJQetw9poUwySJXZXnU6mA1/DRzG1c86EvJ+8u
 32sBMCRlOqkS12gZpGYXumZchEqQL/B1o7XjyEabr5zM79z6Pgp2yGOrVrOK49ZDRKvh
 7HhWIf72wksPwWzcqyq41Ab/ZiJAte9Iut2qx/MLZW8Q2N4qHsgb7XoKUlBfOn8Bcnt6
 ZIDrxdA3eU91wg64wG5kooZNEhTiAIsT4MQWuIOw9jqdaI6xiByJuSV6qfKTv4tUmRD5
 pJYRRbjGW42n7hZ8GEMjrGW8KfAcyFlcQnFkUsNm4hSnU05G0cBn+8warTi74OLrTHAO
 3ViQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20260707; t=1789848953; x=1790453753;
 h=content-type:cc:to:subject:message-id:date:from:in-reply-to
 :references:mime-version:x-gm-gg:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to:content-type;
 bh=Ub09lEbbCmf6wH3NWp8CxxFVlYoaue9/tzNcofalO1Y=;
 b=OHsq7Fw2Is5UbJrAi1Y5mjUKgfkgIRDx1uUZcy2w+bB8qYofBw2vwOOiB2mKf49Vj0
 5PDWdFbdffF2BOtplRSxsgXi66SlDF5ff466OAMUrbzIcJ7mgxnj8RRZ+l6iAguMaZHK
 L9tg+imaWIADYDK91nnIeAYNsKucyW4PCwCW69Edj0W6DDjUu7nm0mBmkGx6Rc+a3OC3
 i6L5o2IKAFO058ERsWIFzjfvHrJuP3nSC0DZVzU1j7Mo/87WpbjDRYIGMBPLQcjDezkB
 F5FNJafNGYSGZqBCV0JPi6ea8hAwQY/bwSbJ5pDeED/IM/+alLKLsydcs2ob3HG2Bm6W
 l1fg==
X-Gm-Message-State: AFuF++kklrYGqu8rVeSyAHVLuq+jLfVIcjm2Sa0bgVPLXspvNqO9k1A5
 KLcwSEa/Cv8LKq6YEJ6FyjBOU6nOyEzNVWfVsxZ4qENmAY1e9fXVmyQNynm9T+YYo0cVxsVY5gL
 IufA2q2njDpg7MSB9hcDcT+4eYODUecE=
X-Gm-Gg: AYBFou0wawZ63iFKqtY9inUgskI+H26zDvgTm/p/o7rCXMXHypgGKfm+A41coqQamj5
 SNH4diGcwNuMfFtRsuhIxSOMxnr+eshDF3ay1kjFDAODSWAWi45LueOkte9ytry8zBed7SI1s1O
 /pCxeWYZGJRqXF4bff70f3JcKgkkcYnjwM5P1i1Zxc4hk+FBBEqaPaKTWxOvxUkFOzhTiDjAR5G
 xaVFwSKQjSj6a2e6eyvty+/lF+rkJXEbDwYq9r2Ks4+Fg6DS2Qi0ugk5sE7sM7sZ6tlRSRDqXXR
 rtLtCMUFrS3gFhpBg7YXkdzFUIQFjgSJSsoxcxRJA8MZ1h+eAj9VqnnETGvPOGAhNNM=
X-Received: by 2002:a05:6512:3c9f:b0:5b6:183b:d214 with SMTP id
 2adb3069b0e04-5b8c1959c7bmr2186029e87.59.1789848952781; Sat, 19 Sep 2026
 13:15:52 -0700 (PDT)
MIME-Version: 1.0
References: <CAOGVwek4rRpPZSg=GCi5Sf-6o43iGaUiFBPcMw9Z14Ag6jYcdg@HIDDEN>
 <861papirdb.fsf@HIDDEN>
 <CAOGVwek5SbcGiVT8Ay5boE4v2wqqqmi3d1qqc1Xchhq5pLDJJg@HIDDEN>
 <86y0cxham9.fsf@HIDDEN>
 <CAOGVwenU_snBEhqGLE0CN7iKfiPvhMLq_ZAcOM+AxRjutNtZFw@HIDDEN>
In-Reply-To: <CAOGVwenU_snBEhqGLE0CN7iKfiPvhMLq_ZAcOM+AxRjutNtZFw@HIDDEN>
From: Len Trigg <lenbok@HIDDEN>
Date: Sun, 20 Sep 2026 08:15:35 +1200
X-Gm-Features: AcwNN1XSIXaR0Sa9dlK8DxUULoEt6gge_MA2871jTJoZGLJErEI0P8pho8x6_RE
Message-ID: <CAOGVwe=WWygY4GUQ3GVA=378quf0buE2nPSqXaQ0JRvjWN9JHA@HIDDEN>
Subject: Re: bug#81894: 31.1.50; multi-tty: new emacsclient connection can
 cause other terminal's minibuffer commands to open on the wrong frame
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: multipart/mixed; boundary="0000000000000862cc065bdbaff0"
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 81894
Cc: =?UTF-8?Q?Gerd_M=C3=B6llmann?= <gerd.moellmann@HIDDEN>,
 81894 <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: 0.0 (/)

--0000000000000862cc065bdbaff0
Content-Type: multipart/alternative; boundary="0000000000000862c9065bdbafee"

--0000000000000862c9065bdbafee
Content-Type: text/plain; charset="UTF-8"

Cc:ing Gerd, who added the conditional I'm modifying in the attached patch.

Although my bug report mentioned the minibuffer, it turns out the bug is
actually not tied to minibuffer in any way. An alternate demonstration:

To reproduce, first arrange two terminals side by side.

Start emacs in one terminal:

emacs -nw -Q /tmp/foo.txt
M-x server-start RET

In the second terminal, connect a client, but do not send it input:

emacsclient -nw

Back in the first terminal (the original emacs -nw), type whatever you
like, and observe the text going into the other terminal (emacsclient, on
*scratch*), instead of the original terminal where you are typing.

This is exactly the kind of phenomenon that the comment around line 2060 in
src/frame.c warns us about:

  /* We want to make sure that the next event generates a frame-switch
     event to the appropriate frame.  This seems kludgy to me, but
     before you take it out, make sure that evaluating something like
     (select-window (frame-root-window (make-frame))) doesn't end up
     with your typing being interpreted in the new frame instead of
     the one you're actually typing in.  */

Attached is a small patch that fixes this bug. It works by not skipping the
clearing of internal_last_event_frame only for brand new frames that
haven't had keyboard input. It should therefore not reintroduce the issue
described in the comment immediately following (regarding invokation via
post-command-hook, possibly involving vertico-posframe). I haven't seen any
problems with vertico-posframe, but if there is a specific test I should
try to reproduce, please let me know.

Cheers,
Len.

On Sat, 19 Sept 2026 at 21:25, Len Trigg <lenbok@HIDDEN> wrote:

>
> On Sat, 19 Sept 2026 at 21:08, Eli Zaretskii <eliz@HIDDEN> wrote:
>
>> Yes.  For the same reason: the connection of the second client made
>> its frame be selected for input.
>>
>> Emacs cannot select the frame for input when input actually arrives,
>> because it's too late.
>>
>
> I do not understand that. How does emacs select any (tty?) frame for input
> when keys are typed then?
>
> Note that the behaviour is different if the sequence is like this:
>
> emacs -nw -Q
> M-x server-start RET
>
> In a second terminal, connect a client, but then exit it:
>
> emacsclient -nw
> C-x 5 0 RET
>
> Immediately start a new client from that same terminal, but do not give it
> input:
>
> emacsclient -nw
>
> Back in the first terminal (the original emacs -nw), invoke any command
> that reads from the minibuffer, e.g.:
>
> M-x
>
> Now the minibuffer does appear in the emacs being typed into (as I would
> expect, but apparently not you).
>
> Cheers,
> Len.
>
>

--0000000000000862c9065bdbafee
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>Cc:ing Gerd, who added the conditional I&#39;m modify=
ing in the attached patch.</div><div><br></div><div>Although my bug report =
mentioned the minibuffer, it turns out the bug is actually not tied to mini=
buffer in any way. An alternate demonstration:</div><div><br></div><div>To =
reproduce, first arrange two terminals side by side.</div><div><br></div><d=
iv>Start emacs in one terminal:<br>=C2=A0<br>emacs -nw -Q /tmp/foo.txt<br>M=
-x server-start RET<br><br>In the second terminal, connect a client, but do=
 not send it input:<br><br>emacsclient -nw<br><br>Back in the first termina=
l (the original emacs -nw), type whatever you like, and observe the text go=
ing into the other terminal (emacsclient, on *scratch*), instead of the ori=
ginal terminal where you are typing.</div><div><br></div><div>This is exact=
ly the kind of phenomenon that the comment around line 2060 in src/frame.c =
warns us about:</div><div><br></div><div>=C2=A0 /* We want to make sure tha=
t the next event generates a frame-switch<br>=C2=A0 =C2=A0 =C2=A0event to t=
he appropriate frame.=C2=A0 This seems kludgy to me, but<br>=C2=A0 =C2=A0 =
=C2=A0before you take it out, make sure that evaluating something like<br>=
=C2=A0 =C2=A0 =C2=A0(select-window (frame-root-window (make-frame))) doesn&=
#39;t end up<br>=C2=A0 =C2=A0 =C2=A0with your typing being interpreted in t=
he new frame instead of<br>=C2=A0 =C2=A0 =C2=A0the one you&#39;re actually =
typing in. =C2=A0*/<br><br></div><div>Attached is a small patch that fixes =
this bug. It works by not skipping the clearing of internal_last_event_fram=
e only for brand new frames that haven&#39;t had keyboard input. It should =
therefore not reintroduce the issue described in the comment immediately fo=
llowing (regarding invokation via post-command-hook, possibly involving ver=
tico-posframe). I haven&#39;t seen any problems with vertico-posframe, but =
if there is a specific test I should try to reproduce, please let me know.<=
/div><div><br></div><div>Cheers,</div><div>Len.</div></div><br><div class=
=3D"gmail_quote gmail_quote_container"><div dir=3D"ltr" class=3D"gmail_attr=
">On Sat, 19 Sept 2026 at 21:25, Len Trigg &lt;<a href=3D"mailto:lenbok@gma=
il.com">lenbok@HIDDEN</a>&gt; wrote:<br></div><blockquote class=3D"gmail=
_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204=
,204);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"></div><br><div cl=
ass=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Sat, 19 Sept 2=
026 at 21:08, Eli Zaretskii &lt;<a href=3D"mailto:eliz@HIDDEN" target=3D"_=
blank">eliz@HIDDEN</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quot=
e" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204)=
;padding-left:1ex">Yes.=C2=A0 For the same reason: the connection of the se=
cond client made<br>
its frame be selected for input.<br>
<br>
Emacs cannot select the frame for input when input actually arrives,<br>
because it&#39;s too late.<br></blockquote><div><br></div><div>I do not und=
erstand that. How does emacs select any (tty?) frame for input when keys ar=
e typed then?</div><div><br></div><div>Note that the behaviour is different=
 if the sequence is like this:</div><div><br></div><div>emacs -nw -Q<br>M-x=
 server-start RET<br><br>In a second terminal, connect a client, but then e=
xit it:<br><br>emacsclient -nw</div><div>C-x 5 0 RET</div><div><br></div><d=
iv>Immediately start a new client from that same terminal, but do not give =
it input:</div><div><br></div><div><div>emacsclient -nw</div><div><br></div=
>Back in the first terminal (the original emacs -nw), invoke any command<br=
>that reads from the minibuffer, e.g.:<br><br>M-x</div><div><br></div><div>=
Now the minibuffer does appear in the emacs being typed into (as I would ex=
pect, but apparently not you).</div><div><br></div><div>Cheers,</div><div>L=
en.</div><div><br></div></div></div>
</blockquote></div>

--0000000000000862c9065bdbafee--

--0000000000000862cc065bdbaff0
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0001-Try-adding-a-flag-to-indicate-new-frame-creation.patch"
Content-Disposition: attachment; 
	filename="0001-Try-adding-a-flag-to-indicate-new-frame-creation.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mu8tbx0g0>
X-Attachment-Id: f_mu8tbx0g0

RnJvbSBlM2I1MzQ0ODkxN2VjYWM3ZDRlNWY3YzBiZTAyY2U0N2Q1OTM5OTcxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMZW5ib2sgPGxlbmJva0BnbWFpbC5jb20+CkRhdGU6IFN1biwg
MjAgU2VwIDIwMjYgMDA6MzM6MjkgKzEyMDAKU3ViamVjdDogW1BBVENIXSBUcnkgYWRkaW5nIGEg
ZmxhZyB0byBpbmRpY2F0ZSBuZXcgZnJhbWUgY3JlYXRpb24KCi0tLQogc3JjL2ZyYW1lLmMgICAg
fCA2ICsrKystLQogc3JjL2ZyYW1lLmggICAgfCAzICsrKwogc3JjL2tleWJvYXJkLmMgfCAyICsr
CiAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYg
LS1naXQgYS9zcmMvZnJhbWUuYyBiL3NyYy9mcmFtZS5jCmluZGV4IGU2MzIxMjY4ZTJmLi4wYjQ2
ZmEwZGE4MSAxMDA2NDQKLS0tIGEvc3JjL2ZyYW1lLmMKKysrIGIvc3JjL2ZyYW1lLmMKQEAgLTE0
NzAsNiArMTQ3MCw3IEBAIG1ha2VfaW5pdGlhbF9mcmFtZSAodm9pZCkKIAogICBmLT5jYW5fc2V0
X3dpbmRvd19zaXplID0gdHJ1ZTsKICAgZi0+YWZ0ZXJfbWFrZV9mcmFtZSA9IHRydWU7CisgIGYt
Pm5ldmVyX2ZvY3VzZWRfcCA9IHRydWU7CiAKICAgcmV0dXJuIGY7CiB9CkBAIC0yMDg2LDggKzIw
ODcsOSBAQCBkb19zd2l0Y2hfZnJhbWUgKExpc3BfT2JqZWN0IGZyYW1lLCBpbnQgdHJhY2ssIGlu
dCBmb3JfZGVsZXRpb24sIExpc3BfT2JqZWN0IG5vcgogICAgICBhbmQgZXhlY3V0ZXMsIHdoaWNo
IGFnYWluIHJ1bnMgcG9zdC1jb21tYW5kLWhvb2sgZXRjLiwgYWQKICAgICAgaW5maW5pdHVtLgog
Ci0gICAgIExldCdzIG5vdCBkbyB0aGF0IGZvciBub3cgb24gdHR5cy4gICovCi0gIGlmICghaXNf
dHR5X2ZyYW1lIChmKSkKKyAgICAgTGV0J3Mgbm90IGRvIHRoYXQgZm9yIG5vdyBvbiB0dHlzLCB1
bmxlc3Mgd2Uga25vdyB0aGUgZnJhbWUgaGFzCisgICAgIG5ldmVyIGhhZCBmb2N1cyAoYW5kIHRo
dXMgd2UgZGlkIG5vdCBnZXQgdmlhIHBvc3QtY29tbWFuZC1ob29rKS4gKi8KKyAgaWYgKCEoaXNf
dHR5X2ZyYW1lIChmKSAmJiAhZi0+bmV2ZXJfZm9jdXNlZF9wKSkKICAgICBpZiAoIWZyYW1lX2Fu
Y2VzdG9yX3AgKGYsIHNmKSkKICAgICAgIGludGVybmFsX2xhc3RfZXZlbnRfZnJhbWUgPSBRbmls
OwogCmRpZmYgLS1naXQgYS9zcmMvZnJhbWUuaCBiL3NyYy9mcmFtZS5oCmluZGV4IDA5MWIxMTJl
OGI5Li4xNmU5Mjk3MDU0ZiAxMDA2NDQKLS0tIGEvc3JjL2ZyYW1lLmgKKysrIGIvc3JjL2ZyYW1l
LmgKQEAgLTQ1Miw2ICs0NTIsOSBAQCAjZGVmaW5lIEVNQUNTX0ZSQU1FX0gKICAgICAgdmlhIG1v
dXNlIGNsaWNrcyBvciBieSBtb3ZpbmcgdGhlIG1vdXNlIGludG8gaXQuICAqLwogICBib29sX2Jm
IG5vX2FjY2VwdF9mb2N1cyA6IDE7CiAKKyAgLyogVHJ1ZSB1bnRpbCB0aGlzIGZyYW1lIGhhcyBw
cm9jZXNzZWQgYXQgbGVhc3Qgb25lIHJlYWwga2V5Ym9hcmQgZXZlbnQuICovCisgIGJvb2xfYmYg
bmV2ZXJfZm9jdXNlZF9wIDogMTsKKwogI2lmZGVmIEhBVkVfV0lORE9XX1NZU1RFTQogICAvKiBU
cnVlIGlmIHRoaXMgZnJhbWUgaXMgYSB0b29sdGlwIGZyYW1lLiAgKi8KICAgYm9vbF9iZiB0b29s
dGlwIDogMTsKZGlmZiAtLWdpdCBhL3NyYy9rZXlib2FyZC5jIGIvc3JjL2tleWJvYXJkLmMKaW5k
ZXggYjFkMTRlZjFhMjUuLmRmOTljN2ZiYzg5IDEwMDY0NAotLS0gYS9zcmMva2V5Ym9hcmQuYwor
KysgYi9zcmMva2V5Ym9hcmQuYwpAQCAtNDM2OSw2ICs0MzY5LDggQEAga2JkX2J1ZmZlcl9nZXRf
ZXZlbnQgKEtCT0FSRCAqKmticCwKIAkgICAgICAmJiAhRVEgKGZyYW1lLCBzZWxlY3RlZF9mcmFt
ZSkpCiAJICAgIG9iaiA9IG1ha2VfbGlzcHlfc3dpdGNoX2ZyYW1lIChmcmFtZSk7CiAJICBpbnRl
cm5hbF9sYXN0X2V2ZW50X2ZyYW1lID0gZnJhbWU7CisJICBpZiAoRlJBTUVQIChmcmFtZSkpCisJ
ICAgIFhGUkFNRSAoZnJhbWUpLT5uZXZlcl9mb2N1c2VkX3AgPSBmYWxzZTsKIAogCSAgaWYgKEVR
IChldmVudC0+aWUuZGV2aWNlLCBRdCkpCiAJICAgIFZsYXN0X2V2ZW50X2RldmljZSA9ICgoZXZl
bnQtPmllLmtpbmQgPT0gQVNDSUlfS0VZU1RST0tFX0VWRU5UCi0tIAoyLjUzLjAKCg==
--0000000000000862cc065bdbaff0--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#81894; Package emacs. Full text available.

Message received at 81894 <at> debbugs.gnu.org:


Received: (at 81894) by debbugs.gnu.org; 19 Sep 2026 09:26:17 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 19 05:26:17 2026
Received: from localhost ([127.0.0.1]:41358 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1x7rKr-0007qW-8a
	for submit <at> debbugs.gnu.org; Sat, 19 Sep 2026 05:26:17 -0400
Received: from mail-lr2-x14.google.com ([2a00:1450:4864:38::14]:32812)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <lenbok@HIDDEN>) id 1x7rKm-0007q1-4x
 for 81894 <at> debbugs.gnu.org; Sat, 19 Sep 2026 05:26:15 -0400
Received: by mail-lr2-x14.google.com with SMTP id
 38308e7fff4ca-3a60ed65bc8so417881fa.1
 for <81894 <at> debbugs.gnu.org>; Sat, 19 Sep 2026 02:26:12 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1789809965; cv=none;
 d=google.com; s=arc-20260327;
 b=kgf5ebKmjf47ZV6OoDJgKgusvDDZcr3F6YvZRmu4/69aVjT9/m79lNmg9oU/nEsNmk
 AZUNxYbJUnKZ4EAhrcZNwXArz45DBSQL0wkHAtZDWB8EnAH6ZW/Mbt82rVbrdHRhM6V0
 8Wkga2zBvcJ4vyRpPHNlotRr6WMuQ84hnBKLuadeVihIe38f9v/cpml2rNm81MaGpOvt
 ZEToXpBDfZpzhbFEvywgkDzOvNef2N1z/ETIf4gXXw87jG4xE8YlTNUsBYqTLRT0GCHL
 +VotnL0f7pIvUyNqTeN94v3q52TW0N6PRH2CwxQlY82izchu9GDAFAsOFAWrduVZjFXO
 7okw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;
 s=arc-20260327; 
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:dkim-signature;
 bh=Cdb49I2sYP5rPYcnBnKSQXpHw6xEARVxf/E9wX2Nw+g=;
 fh=LUWSTrxhN1M2J8isO1jO0lAW9Z1NrWiB6EdWqWVrJus=;
 b=Id7Ym5Vd+uO62PajI1KaHOi8yQMuQGSDLzJJI12R9eLB9uPcfF6U2QdFaxNYLYCa5E
 q8fXab8CsX47qvojOR4SqA4oKoX2hPMs5yF3eU80LBiCNzwrYKg6+TXcARSFLHw3CFR/
 xExZi0qQXB9xFFZPWkH3HCdVutF0CO2x1Zq/UYqnTlb0oWyiwpF7hhQuXDDDLLDYp43E
 KmAwUCKOUOYZqdgvQauoofybtQpuw8c3l/l+kqgg9+Jc6pPRp6qUJpZWRZ2Sj39Lx64W
 6VDlEKt5m2L167HFgiNrK4WCm6Z1SrTKnYg2CrK6+SB6hhSO7aJFWwf1a9ctCHMfxDzM
 iVgg==; darn=debbugs.gnu.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20251104; t=1789809965; x=1790414765; darn=debbugs.gnu.org;
 h=content-type:cc:to:subject:message-id:date:from:in-reply-to
 :references:mime-version:from:to:cc:subject:date:message-id:reply-to
 :content-type; bh=Cdb49I2sYP5rPYcnBnKSQXpHw6xEARVxf/E9wX2Nw+g=;
 b=HANZ1tGgKbNwIm7tdpevlY8kHaz6IPqBOjIO7H5Ov+8xTevtwCNk6VvmtGhrwwef04
 c3pC0iXDdMcZHT24jw0h0jx52MPovTSkaQrgT+tibPpaXbdX8FH+p/ZBl+5EdaAsKYa+
 o7pvu3nZnbKPnbPYwvi9YK4rZLcNCACqZdvkH0GvryXD5XgHl0lQc+ykMNz5LLjTlTkD
 bmbq2G3i1/94byREduJrsupWqjFp2T79QDxFLFwqAzByFlRJ3K3bkB7d//VBWHu2rAeq
 klMxISt34WedZ6XR6Fh8JwmgEAhUncytDnP/54tC1ST92rzagstVkDdXMnfcudoAMTLv
 3fVQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20260707; t=1789809965; x=1790414765;
 h=content-type:cc:to:subject:message-id:date:from:in-reply-to
 :references:mime-version:x-gm-gg:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to:content-type;
 bh=Cdb49I2sYP5rPYcnBnKSQXpHw6xEARVxf/E9wX2Nw+g=;
 b=CPKvf3ah2YNg+blqjL8VRY8yNcp6OlUY6m0GBYhhCREh5HffKIdH7XTf8YfUEyWz55
 vxe+ezA/qxtdV8TSFL0PDwbvlelu786Q4qmqu0CKRtNKhyRdKxd1MzW85Aj37aIIj3Ho
 L05oZfUJ2wGFLW4zKY8q9LjXOFyaGGZvfHLF1btZaW/N+XG+9wawBRKmPkrwm+75oe2R
 pEeUDKj+QAYoxTfy9ZC7GP/XmoCkS2unnJxjlA+u0PJ0SFUqGEF+MGTs6Zl39Si/Pa4r
 s9Y6iIcKIAo1eLhHvtoOJAlTPIlt0G2fMQNeiBe6SuiRsb3+4oTNbn6m8qRp5VgW7g9b
 d5KQ==
X-Gm-Message-State: AFuF++nvmvw94HIoqHHA6gzliNGmADWD2HuMvg28D6UnsVVlB7zRfyxN
 txq4UrpQSGQfeAig5v50SItKEDYABcgEEal6dUT8C0loB0W0/lklqrGYwwmsQUrRbqC1WwTBWOT
 XviXul999tnOZJ8HN+ERUow9ZiDIFzvY=
X-Gm-Gg: AYBFou2+K8Xn6tieNJ1FyJZSnno6uyt0PUZrkp9sa0TP13VEoA9RlbnRTsROT3AG/Z9
 pETr77HPKNeOZhNgW3ckZpxKJ/esRNLSy5AUjJv2xuZkruNErcxcnUZVNNxzBgvlA5wHVIJaRhF
 3Lq3nqmkdd65dAVcbLVKrLkTGccvbLg1CzQQKqH58ny8Fybi7VrpT43Gp+VPtBzD6o/QBXqL0WT
 1nhX4J5GZcG9UpJzQ/BtJtAXLAEPEBcTw81OtZFwQnQSVY0kx8MBwJuBd8kLc/Sz3CcTfmKyGVk
 bEKFT/GSBy/dHBKUnIYKYHvWRbvJ0vsxCBIMah1//J0HRK+ad08RZET4uacb9AeaNoY=
X-Received: by 2002:a2e:a812:0:b0:3a3:74b9:8a7f with SMTP id
 38308e7fff4ca-3a5fc089db5mr11189241fa.24.1789809965419; Sat, 19 Sep 2026
 02:26:05 -0700 (PDT)
MIME-Version: 1.0
References: <CAOGVwek4rRpPZSg=GCi5Sf-6o43iGaUiFBPcMw9Z14Ag6jYcdg@HIDDEN>
 <861papirdb.fsf@HIDDEN>
 <CAOGVwek5SbcGiVT8Ay5boE4v2wqqqmi3d1qqc1Xchhq5pLDJJg@HIDDEN>
 <86y0cxham9.fsf@HIDDEN>
In-Reply-To: <86y0cxham9.fsf@HIDDEN>
From: Len Trigg <lenbok@HIDDEN>
Date: Sat, 19 Sep 2026 21:25:48 +1200
X-Gm-Features: AcwNN1VONWCEPT2QlpVsWmtYG1aUbIT0krl25-FmjEqwS5SmYsjEO9wdr6VaYbg
Message-ID: <CAOGVwenU_snBEhqGLE0CN7iKfiPvhMLq_ZAcOM+AxRjutNtZFw@HIDDEN>
Subject: Re: bug#81894: 31.1.50; multi-tty: new emacsclient connection can
 cause other terminal's minibuffer commands to open on the wrong frame
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000345135065bd29b20"
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 81894
Cc: 81894 <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: 0.0 (/)

--000000000000345135065bd29b20
Content-Type: text/plain; charset="UTF-8"

On Sat, 19 Sept 2026 at 21:08, Eli Zaretskii <eliz@HIDDEN> wrote:

> Yes.  For the same reason: the connection of the second client made
> its frame be selected for input.
>
> Emacs cannot select the frame for input when input actually arrives,
> because it's too late.
>

I do not understand that. How does emacs select any (tty?) frame for input
when keys are typed then?

Note that the behaviour is different if the sequence is like this:

emacs -nw -Q
M-x server-start RET

In a second terminal, connect a client, but then exit it:

emacsclient -nw
C-x 5 0 RET

Immediately start a new client from that same terminal, but do not give it
input:

emacsclient -nw

Back in the first terminal (the original emacs -nw), invoke any command
that reads from the minibuffer, e.g.:

M-x

Now the minibuffer does appear in the emacs being typed into (as I would
expect, but apparently not you).

Cheers,
Len.

--000000000000345135065bd29b20
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"></div><br><div class=3D"gmail_quote gmail=
_quote_container"><div dir=3D"ltr" class=3D"gmail_attr">On Sat, 19 Sept 202=
6 at 21:08, Eli Zaretskii &lt;<a href=3D"mailto:eliz@HIDDEN">eliz@HIDDEN<=
/a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0=
px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Y=
es.=C2=A0 For the same reason: the connection of the second client made<br>
its frame be selected for input.<br>
<br>
Emacs cannot select the frame for input when input actually arrives,<br>
because it&#39;s too late.<br></blockquote><div><br></div><div>I do not und=
erstand that. How does emacs select any (tty?) frame for input when keys ar=
e typed then?</div><div><br></div><div>Note that the behaviour is different=
 if the sequence is like this:</div><div><br></div><div>emacs -nw -Q<br>M-x=
 server-start RET<br><br>In a second terminal, connect a client, but then e=
xit it:<br><br>emacsclient -nw</div><div>C-x 5 0 RET</div><div><br></div><d=
iv>Immediately start a new client from that same terminal, but do not give =
it input:</div><div><br></div><div><div>emacsclient -nw</div><div><br></div=
>Back in the first terminal (the original emacs -nw), invoke any command<br=
>that reads from the minibuffer, e.g.:<br><br>M-x</div><div><br></div><div>=
Now the minibuffer does appear in the emacs being typed into (as I would ex=
pect, but apparently not you).</div><div><br></div><div>Cheers,</div><div>L=
en.</div><div><br></div></div></div>

--000000000000345135065bd29b20--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#81894; Package emacs. Full text available.

Message received at 81894 <at> debbugs.gnu.org:


Received: (at 81894) by debbugs.gnu.org; 19 Sep 2026 09:08:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 19 05:08:27 2026
Received: from localhost ([127.0.0.1]:38440 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1x7r3b-0005ht-Fn
	for submit <at> debbugs.gnu.org; Sat, 19 Sep 2026 05:08:27 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:42862)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1x7r3Y-0005h5-Ps
 for 81894 <at> debbugs.gnu.org; Sat, 19 Sep 2026 05:08:25 -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 1x7r3T-000818-GT; Sat, 19 Sep 2026 05:08:19 -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=OHb+vJ3l2EGuhkH23va18Yu0YeTXQqnRSgIgYPwld2E=; b=XEOC9e2Ehom4
 j/ud3MH4ydQLnl8iIDy7JrLWu+0uMf7IvgLcMVXx2JnOBMYx85Qb+X8zDWjs+I/gz8C6C8+Z8Eeft
 RN1JeujeuiGYo+1rA/e4QUMprQsCTm7VCX6PXq69N9Xmvoz5wBYk/u8DUeZhxAkK5Q5qUCMIdddxA
 CjQKcNRz/hRHD3/AdEyt60XTDTQkRrdchYq18h2WgxEAQ2sD1FMDhpW3XgYOsTAP+1jc3adaJ/SzZ
 mMYJmXREdy21lK+h/xCYxqUceam3gfZewZjgNd3T7q+ess20oD/ullmVzi0ApyjJfryyFz3mbGf/o
 mIkhk+O0MmbLnwAsZkDuhw==;
Date: Sat, 19 Sep 2026 12:08:14 +0300
Message-Id: <86y0cxham9.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Len Trigg <lenbok@HIDDEN>
In-Reply-To: <CAOGVwek5SbcGiVT8Ay5boE4v2wqqqmi3d1qqc1Xchhq5pLDJJg@HIDDEN>
 (message from Len Trigg on Sat, 19 Sep 2026 20:38:54 +1200)
Subject: Re: bug#81894: 31.1.50; multi-tty: new emacsclient connection can
 cause other terminal's minibuffer commands to open on the wrong frame
References: <CAOGVwek4rRpPZSg=GCi5Sf-6o43iGaUiFBPcMw9Z14Ag6jYcdg@HIDDEN>
 <861papirdb.fsf@HIDDEN>
 <CAOGVwek5SbcGiVT8Ay5boE4v2wqqqmi3d1qqc1Xchhq5pLDJJg@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 81894
Cc: 81894 <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: -3.3 (---)

> From: Len Trigg <lenbok@HIDDEN>
> Date: Sat, 19 Sep 2026 20:38:54 +1200
> Cc: 81894 <at> debbugs.gnu.org
> 
> On Sat, 19 Sept 2026 at 20:21, Eli Zaretskii <eliz@HIDDEN> wrote:
> 
>  All true, but why is this a bug?  Emacs quite correctly selects a new
>  client frame, on the assumption that a client that connects will soon
>  need your attention.
> 
>  What would you expect to happen instead, given that Emacs can only
>  accept input from a single client frame?
> 
> Did you try my reproduction steps? I would expect that the frame into which I typed is the one where the
> minibuffer appears! Is that expectation surprising?

Yes.  For the same reason: the connection of the second client made
its frame be selected for input.

Emacs cannot select the frame for input when input actually arrives,
because it's too late.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#81894; Package emacs. Full text available.

Message received at 81894 <at> debbugs.gnu.org:


Received: (at 81894) by debbugs.gnu.org; 19 Sep 2026 08:39:23 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 19 04:39:22 2026
Received: from localhost ([127.0.0.1]:33654 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1x7qbR-0002MC-QD
	for submit <at> debbugs.gnu.org; Sat, 19 Sep 2026 04:39:22 -0400
Received: from mail-lr2-x10.google.com ([2a00:1450:4864:38::10]:60675)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <lenbok@HIDDEN>) id 1x7qbO-0002L0-NG
 for 81894 <at> debbugs.gnu.org; Sat, 19 Sep 2026 04:39:20 -0400
Received: by mail-lr2-x10.google.com with SMTP id
 38308e7fff4ca-3a2ff176d5bso11991981fa.2
 for <81894 <at> debbugs.gnu.org>; Sat, 19 Sep 2026 01:39:18 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1789807152; cv=none;
 d=google.com; s=arc-20260327;
 b=lAvWAnxXx4xsecSzPskibABNzRsFaqrWRnSTfMx3EhLnBHL2wScqz1L+Gy3ybXYo+W
 SA3o9WSE425IBxFkyqjntBRkyCxfwL7nLDtkR37u2mcvPnSRnH+TWaFPDFbDuJC7VX48
 N6ktWlaHK88e9HW50jh5foqz4RB2yv+O2gPo9uF/6aFueFw9jF8RaUEoC61mucOm3jV6
 nWMqCaYwWBLGXK4LytDDLU/0aFuTLCi6kZdzrwWID8nSnkpQCSC+n4zUKNtprv3zjTNg
 2/8ReMKZwaBXYFWbpFYIhLXxOT7NaAHup4cfsU/AMJWeLTDZZwBfyg6v7dhLwBrZG1ib
 oH2A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;
 s=arc-20260327; 
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:dkim-signature;
 bh=XrMMW2Q6Nb9k9niMyYxnMljCvDZDsZ+35+UMbjH1/vU=;
 fh=LUWSTrxhN1M2J8isO1jO0lAW9Z1NrWiB6EdWqWVrJus=;
 b=aEGmYwnO7XtgIYk91dPswOjbVt+DLz+TqiUVCl+ZYkXyMJd5RclocAfTxXnFo3DfuB
 t57l/xR1qHWqdWTvL1ywMk+ikS+lDv8hnVLgWPs/nWhcCJVthnJ1kjwygIR724Q4WZK4
 mecR4MNvMXMN4iFpHGqH4VZclkhEmIZakHtUAjIj2hfs6ADfT3KS/BMiN8yDHzAzRs5p
 dzSau+8+9QjUAwwtIJHrAN0pROuKmIjrQlxxcTw345cIywKbkVUFYtoiUllQSp1tECir
 F57NJUGsaOm8HpJB9UCtQTg1Dnu9JTPlteeqLfeVY4LbPy5lG47B8P2eXZj1KXBpniae
 eJ7g==; darn=debbugs.gnu.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20251104; t=1789807152; x=1790411952; darn=debbugs.gnu.org;
 h=content-type:cc:to:subject:message-id:date:from:in-reply-to
 :references:mime-version:from:to:cc:subject:date:message-id:reply-to
 :content-type; bh=XrMMW2Q6Nb9k9niMyYxnMljCvDZDsZ+35+UMbjH1/vU=;
 b=a3N1d0dXN9urnp4msf2bVIckYki2nxv6Df3P+fCE0RxffikKiroIgtDiwG2lwezIE9
 socJSTHylEQ9EffueIW8ZlnjC0s/bY9KtvPxrA9xPzRCI0sEHCfBerN6+zAzAfU31Iar
 3BK9N/iwbUCS1UplpD0UsdGkod66veDFCGw3AAp6tYowsHYdkdFPvHEe9Di2f2sdnQp7
 jU6K2s1CZ7RmymjNibRd+31pusHmmzJERBGQvEuv0lP6lObFx5lhE3eD0JxtXJxHCtvF
 B3Nz1I1LqEsIf5FL8haXIsrWtfktL70zvAFTwkE0q92cbRxJJBPYZ3574LgtVUOgHqzl
 G6yQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20260707; t=1789807152; x=1790411952;
 h=content-type:cc:to:subject:message-id:date:from:in-reply-to
 :references:mime-version:x-gm-gg:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to:content-type;
 bh=XrMMW2Q6Nb9k9niMyYxnMljCvDZDsZ+35+UMbjH1/vU=;
 b=TkD6uxexPZ1VFJaEPnjlpEGxSFbEYLl0jPTNEwyHJ+4x2Gt3PBGbR3qcui6DWH+k/k
 gDBNUrdJOb0jnTafL0nqZg0fh01nsxoXtuRmZbwKxxa8SIcsm7jQ9Rq/10M1QC7T2yTn
 d6UdwOqwoA5Dcpnl2knAoBo0sKq+g8hzsgU4cBOuaE5/EI1CNKPOm5BFxPJql2/5G0WQ
 HMBWQVYO0UD2vVxkc17NxkLcY1Y1zj1ZpOmMBPBxrHU2RN9p1G/v71qQYDRqckB7OIJw
 KUv0g27mmdByWycv/JufccBoQFhM6ADAJTkAt9993L5yFbFfXVedObMS/kRFYjYLH9eD
 kKFQ==
X-Gm-Message-State: AFuF++nIMVmXTdTslkEbOBSwhe9U4/mhVHlVl4zMUSTw8b/U1gV6Hc23
 6iXapRSVGyX2LsEImaAP/PBoIc3kes4WrISCNVi6AUqn5gen/j60YaP6xchQ1E0B/BdP4l6Wg7Z
 akkFGiE8/dzxCsXlEFIeGP7lCM71cQAs=
X-Gm-Gg: AYBFou3R5U+wNKKqi61+/JGxXouFwHIl+tvrD+OSU2rACCXBBN/gve8rm3uhIyS3RfT
 RwuyByQtnODxEUNfIYlHZmyXuPduAzUNZHUGsoT454pwrIyRsZAGhql+Kw01HhFvNcy5Wez2p1d
 PxBNLGN9CYzNRe+PMXwxkOAyHWSI4sNm4yOM7L+DfBlB2pqLqNF4V2jr0x7ZjQVIgDR2tN01xos
 CFqh9+wkWh3ChurEk/9xS9QDT3KrruCbf/o15JnLbnIojAZPHkbyoaohqhiDknEQDxRcPqpdiJL
 1bl578vbMrcrrs3Axnh3ffa6v0CK2Q049SCovNo6BQD6wza4SyK1w+g/
X-Received: by 2002:a2e:bc16:0:b0:3a4:95f0:c5b7 with SMTP id
 38308e7fff4ca-3a5fbebf807mr10168991fa.3.1789807151824; Sat, 19 Sep 2026
 01:39:11 -0700 (PDT)
MIME-Version: 1.0
References: <CAOGVwek4rRpPZSg=GCi5Sf-6o43iGaUiFBPcMw9Z14Ag6jYcdg@HIDDEN>
 <861papirdb.fsf@HIDDEN>
In-Reply-To: <861papirdb.fsf@HIDDEN>
From: Len Trigg <lenbok@HIDDEN>
Date: Sat, 19 Sep 2026 20:38:54 +1200
X-Gm-Features: AcwNN1Xf5j8-ntroEhrV2VPFsE2t5ha2Mu1ZOzAy_ErNVKF-sfJJzeXnwHrJNQU
Message-ID: <CAOGVwek5SbcGiVT8Ay5boE4v2wqqqmi3d1qqc1Xchhq5pLDJJg@HIDDEN>
Subject: Re: bug#81894: 31.1.50; multi-tty: new emacsclient connection can
 cause other terminal's minibuffer commands to open on the wrong frame
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: multipart/alternative; boundary="0000000000008041c8065bd1f3b3"
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 81894
Cc: 81894 <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: 0.0 (/)

--0000000000008041c8065bd1f3b3
Content-Type: text/plain; charset="UTF-8"

(Sorry Eli, ignore my previous email that was accidentally Reply rather
than Reply All.)

On Sat, 19 Sept 2026 at 20:21, Eli Zaretskii <eliz@HIDDEN> wrote:

> All true, but why is this a bug?  Emacs quite correctly selects a new
> client frame, on the assumption that a client that connects will soon
> need your attention.
>
> What would you expect to happen instead, given that Emacs can only
> accept input from a single client frame?
>

Did you try my reproduction steps? I would expect that the frame into which
I typed is the one where the minibuffer appears! Is that expectation
surprising?

Cheers,
Len.

--0000000000008041c8065bd1f3b3
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>(Sorry Eli, ignore my previous email that was acciden=
tally Reply rather than Reply All.)</div><br><div class=3D"gmail_quote gmai=
l_quote_container"><div dir=3D"ltr" class=3D"gmail_attr">On Sat, 19 Sept 20=
26 at 20:21, Eli Zaretskii &lt;<a href=3D"mailto:eliz@HIDDEN">eliz@HIDDEN=
</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:=
0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">=
All true, but why is this a bug?=C2=A0 Emacs quite correctly selects a new<=
br>
client frame, on the assumption that a client that connects will soon<br>
need your attention.<br>
<br>
What would you expect to happen instead, given that Emacs can only<br>
accept input from a single client frame?<br></blockquote><div><br></div><di=
v><div>Did you try my reproduction steps? I would expect that the frame int=
o which I typed is the one where the minibuffer appears! Is that expectatio=
n surprising?</div><div><br></div><div>Cheers,</div><div>Len.</div>=C2=A0</=
div></div></div>

--0000000000008041c8065bd1f3b3--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#81894; Package emacs. Full text available.

Message received at 81894 <at> debbugs.gnu.org:


Received: (at 81894) by debbugs.gnu.org; 19 Sep 2026 08:21:18 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 19 04:21:17 2026
Received: from localhost ([127.0.0.1]:59133 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1x7qJx-0000TY-Ca
	for submit <at> debbugs.gnu.org; Sat, 19 Sep 2026 04:21:17 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:40582)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1x7qJs-0000SZ-N9
 for 81894 <at> debbugs.gnu.org; Sat, 19 Sep 2026 04:21: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 1x7qJn-00037z-Ag; Sat, 19 Sep 2026 04:21:07 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
 Date; bh=0vsK4zEIVqctMHFcX+7AbaE/ZUzMcVawvx4s+NdcvcU=; b=nyEtxRIc8bjN6hXRsCk5
 irC5zGZbuDjsU8+cXZJEMmcbTH5e0Eh419s8pmcCh5pJpGpU3rEPUIW6vT2gnwcSPw/NAhf6a37/A
 69xJANM6jb6EQg6hVbXZyM61zPPgSOdxlWrgLCojBlHh7JLKgLKwpufRpcaDd4zlCRhxR0SaepGm4
 ivjX53w3e4LFD7IPtaoOdoQd0ZvrnACPLqrr4Q1Wxw4+tjxBuVXSFg4CJNnt9vLzylNzTjAE/00ag
 bJiaGwXjOa40zc3pw6g+aWZFkaHf3KPBmfsblcn+LsjIPUj5U5vM8HjMa2+0GRS4UFvpjWHj8duAE
 ZZOLqyqSM1bv8g==;
Date: Sat, 19 Sep 2026 11:21:04 +0300
Message-Id: <861papirdb.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Len Trigg <lenbok@HIDDEN>
In-Reply-To: <CAOGVwek4rRpPZSg=GCi5Sf-6o43iGaUiFBPcMw9Z14Ag6jYcdg@HIDDEN>
 (message from Len Trigg on Sat, 19 Sep 2026 18:29:40 +1200)
Subject: Re: bug#81894: 31.1.50;
 multi-tty: new emacsclient connection can cause other terminal's
 minibuffer commands to open on the wrong frame
References: <CAOGVwek4rRpPZSg=GCi5Sf-6o43iGaUiFBPcMw9Z14Ag6jYcdg@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 81894
Cc: 81894 <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: -3.3 (---)

> From: Len Trigg <lenbok@HIDDEN>
> Date: Sat, 19 Sep 2026 18:29:40 +1200
> 
> While trying to reproduce some multiple terminal tty-child-frame issues I have
> previously experienced, I encountered this bug, which seems a general
> multi-tty issue. Opening a new emacsclient in a terminal but not sending it
> input, would cause input in another emacsclient to send the minibuffer
> to the wrong frame (i.e. to the new emacsclient).
> 
> To reproduce, first start emacs in one terminal:
> 
> emacs -nw -Q
> M-x server-start RET
> 
> In a second terminal, connect a client, but do not send it input:
> 
> emacsclient -nw
> 
> Back in the first terminal (the original emacs -nw), invoke any command
> that reads from the minibuffer, e.g.:
> 
> M-x
> 
> The minibuffer session opens on the second terminal's frame (the emacsclient
> frame), not on the first terminal where the command was actually typed. The
> first terminal's mode line goes inactive and further keystrokes there are
> rejected with:
> 
> Frame is locked; see 'multiple-terminals-merge-keyboards' variable
> 
> * If any input is sent to the new emacsclient, the bug does not occur.
> 
> * If instead of leaving the fresh emacsclient idle, it's closed (C-x 5
>   0) and a new emacsclient -nw is started on the same terminal (still
>   without sending it input), the subsequent M-x in the first terminal
>   does not trigger the bug.
> 
> I used an LLM to provide a starting point for the cause, and it
> suggests that the sequence of events is:
> 
> • server--create-frame in lisp/server.el unconditionally calls (select-frame frame) on every newly created client
> frame, with no coupling to which terminal actually has focus.
> • do_switch_frame in src/frame.c sets the global selected_frame to this new frame, but for tty frames
> specifically it deliberately skips resetting internal_last_event_frame (guarded by if (!is_tty_frame (f)) around
> what is currently line 2090; comment references a prior fix for an unrelated switch-frame/post-command-hook
> infinite loop). selected_frame, internal_last_event_frame, and current_kboard are all single, process-wide
> globals, not per-terminal state.
> • choose_minibuf_frame in src/minibuf.c (used by every minibuffer-reading command) picks the minibuffer
> window from whatever selected_frame currently is, with no reference to which terminal's keystroke triggered
> the read.
> • temporarily_switch_to_single_kboard, called from read_minibuf in src/minibuf.c, then locks the current
> keyboard to that same (wrong) frame's terminal — which is the direct cause of the "Frame is locked" message
> on the original terminal.
> 
> Hopefully someone familiar with these systems has an idea what and appropriate fix might be.

All true, but why is this a bug?  Emacs quite correctly selects a new
client frame, on the assumption that a client that connects will soon
need your attention.

What would you expect to happen instead, given that Emacs can only
accept input from a single client frame?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#81894; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 19 Sep 2026 06:30:38 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 19 02:30:38 2026
Received: from localhost ([127.0.0.1]:35669 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1x7oan-0002bz-HL
	for submit <at> debbugs.gnu.org; Sat, 19 Sep 2026 02:30:38 -0400
Received: from lists1p.gnu.org ([2001:470:142::17]:32888)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <lenbok@HIDDEN>) id 1x7oaf-0002Us-7x
 for submit <at> debbugs.gnu.org; Sat, 19 Sep 2026 02:30:31 -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 <lenbok@HIDDEN>) id 1x7oaQ-0003s7-VS
 for bug-gnu-emacs@HIDDEN; Sat, 19 Sep 2026 02:30:11 -0400
Received: from mail-lr2-x10.google.com ([2a00:1450:4864:38::10])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <lenbok@HIDDEN>) id 1x7oaI-0004vU-U3
 for bug-gnu-emacs@HIDDEN; Sat, 19 Sep 2026 02:30:10 -0400
Received: by mail-lr2-x10.google.com with SMTP id
 38308e7fff4ca-3a5d4688decso14605791fa.2
 for <bug-gnu-emacs@HIDDEN>; Fri, 18 Sep 2026 23:30:00 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1789799399; cv=none;
 d=google.com; s=arc-20260327;
 b=WazqHD3RBp+jyFnVkUY9wHka/IKvTG2EpqiKhEVr9A1mEDOBC0IjIiS5L1pLlnXk8q
 EuOc8146kI1Q7v7A32YVinLU3y7cTJNfi34qnCKwuqqLtVmNlFfu1V6yBJ39HWcdv+cS
 4URSH/Wmg1c6IdKviN45amOZE4nlhkFZDN9Zrx4pf8iCCnMQlaqt6hdw5Tf2jurKGrSN
 ctmqZKAMNzjBgeh1NoKdKgXv5aggxescX+IWtzS6CcJQE4bA+r1T2Pu0X9PAErrzLO4J
 7Bu1pMPurdqJcU1AZp52R+a1iFEFfHUkN79RmHwEHfdMCGervPVv9xIF5Fo//JOhUWgO
 UavA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;
 s=arc-20260327; 
 h=to:subject:message-id:date:from:mime-version:dkim-signature;
 bh=r5WZR43QijCjw9j/xVGeHnSi+VyFPDdWTnGmZtRWszg=;
 fh=+R8aXOFVnuBbN1nRXJJI02Ia//JUQJmLW/Uk/VaA0ag=;
 b=IQDvVD+OyjwlrlW2TYPhtIgMddQD9Su6aoqSzIRcSvYmtkWjezD1CJ1NAep0mPZL3k
 anRsB316EkL6DrmZBvU0mhTkqgB+j7IndJCZ1lD2syoXWwv0OA4FyKM4nV5eFrsOUS4X
 E/RWEIXa2hjZdKJATihRjtUoBEhLBimYh7HyKn9VzvMllxWXS1hcc4WUf81LKCV+R+I3
 4HjqhNSuq2YKe1EnEsTd47qqKj3NzGF+9n1AgTUgJNv+615D8Leq/jImiJbao0TwR/FX
 yVaOYPsA33/gsyX0Undm0Y4Nkp2QGFUsKyYXJkYM6wFFOyR077i4C8ub4+SNKeNveV1c
 WQgQ==; darn=gnu.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20251104; t=1789799399; x=1790404199; darn=gnu.org;
 h=content-type:to:subject:message-id:date:from:mime-version:from:to
 :cc:subject:date:message-id:reply-to:content-type;
 bh=r5WZR43QijCjw9j/xVGeHnSi+VyFPDdWTnGmZtRWszg=;
 b=V6N9qeqQsecgA4kdvNEr7jRLPZ+o8MDkebHeGk4UVVkFrBx+5tbBdEzw9iPo6VaSmQ
 7FkAUGeIo7fGGigSFxvmGN6gHuXwkdrl2Jb6TtpIYibn2dngKIpk/3Ym4M51t9MSDPjv
 ocWKaOvm6cJuFCaH6qeL3bbKHFLjTA2nQoNX0Esu2UJl2dZ8JmcRe1vhC/aG/CMKqy65
 Q6qh2u/rE4unYdTarJPVv0+r4CQ09cwqn7AMLIrDfhBPGcMrB55VQ5c17Vt+/ixBJPRF
 jNQvlZX0KNLgAD+jqdoGiL6k740ErzWeAeKM9wCPckLv366sx5J6sBpNX7z8Xqt6qo2f
 X3pQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20260707; t=1789799399; x=1790404199;
 h=content-type:to:subject:message-id:date:from:mime-version:x-gm-gg
 :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to
 :content-type;
 bh=r5WZR43QijCjw9j/xVGeHnSi+VyFPDdWTnGmZtRWszg=;
 b=g2EcfqyFC5Smus2DDvV+ruhT4VDu8/skBSIKNW7QjY6Qc1fYt+bGDSVKLlpp4FY1fh
 moTkHqH1YGO0bo9VlqjkCSk80jpjczNKQfeoHXiQnuF0IqRApDKYH21K6TNGWY/GfDAO
 lenrkAodfXLNnD8T1C24T/I55d4KPG9D4hNGiRAGceJYWh6C5S4w9VYKPOqJ1p4xCRwS
 G+objFzHS26imj4nfFKiU6iV6u5da9SQ++AGChfIEcYH8zVEbdi9goDKPPlsO0Dvoi2s
 SKkBxEMf6Jzn5YgkkUoyH6y2Lxru40pnWvMCm2IjmAE3Z10FYIxvR6w6GZRZMwzfTO6y
 mu5w==
X-Gm-Message-State: AFuF++ndbPqlE0BJGSuPJ26/Ba0WdCh3ZqAsdaO6WHG0+koptOldZ7a4
 WZOn0+5p2dpgMMbcYFyViEmQvIhsk8hpM+Mt+0nA/F8ZEOC/WYC9I7cSlaMC0Pfu9uDRI+TgKHR
 q/SSyuhoMI6NYlUm9Q2uvdnTa848keVFkEwQXt14=
X-Gm-Gg: AYBFou3CIE2KPoq9vWIY09LbkkIIPWhcTMNGc/OAtvgUEZSfUkeq8la/tcvdOmQuAgP
 popuRDFOp+LAyN+HF/NnDMU8UIE3Ha3mwAyuhTI4MI6JovDuHk4I3nZXImSs9IZEH55TLRvrCbx
 za7nLspjiovFakqacb9W1GnlQwmZs/bUg4vtxFXGc9IAOm5NrDAF4qROdGymCvbm+MZIxVuFicp
 l1qWmzIqBNduPbOD0DDf5yeTFWNAeG7TDTHbUdO+e8qq7DFQn3F7+yHY1VWuhBvzeKcGeb+Rbuj
 y6tfjng/SD28tFT9d2foAdEgZ/Pqr4+RXB0XZak3y3aIasN9y03n+atX
X-Received: by 2002:a05:651c:509:b0:3a3:7682:49a0 with SMTP id
 38308e7fff4ca-3a5fc0a87b3mr9161721fa.21.1789799397702; Fri, 18 Sep 2026
 23:29:57 -0700 (PDT)
MIME-Version: 1.0
From: Len Trigg <lenbok@HIDDEN>
Date: Sat, 19 Sep 2026 18:29:40 +1200
X-Gm-Features: AcwNN1XDtovvKzA4dd4HwGabDq6RZiAKdTqKc0Jfs6SdbQD2tjdi8O9dbJ9pYas
Message-ID: <CAOGVwek4rRpPZSg=GCi5Sf-6o43iGaUiFBPcMw9Z14Ag6jYcdg@HIDDEN>
Subject: 31.1.50; multi-tty: new emacsclient connection can cause other
 terminal's minibuffer commands to open on the wrong frame
To: bug-gnu-emacs@HIDDEN
Content-Type: multipart/alternative; boundary="00000000000051c1e8065bd0253b"
Received-SPF: pass client-ip=2a00:1450:4864:38::10;
 envelope-from=lenbok@HIDDEN; helo=mail-lr2-x10.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 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, FREEMAIL_FROM=0.001,
 HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 2.0 (++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 Content preview: While trying to reproduce some multiple terminal
 tty-child-frame
 issues I have previously experienced, I encountered this bug, which seems
 a general multi-tty issue. Opening a new emacsclient in a ter [...] 
 Content analysis details:   (2.0 points, 10.0 required)
 pts rule name              description
 ---- ---------------------- --------------------------------------------------
 -0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at https://www.dnswl.org/,
 no trust [2001:470:142:0:0:0:0:17 listed in] [list.dnswl.org]
 1.0 SPF_SOFTFAIL           SPF: sender does not match SPF record (softfail)
 1.0 FORGED_GMAIL_RCVD      'From' gmail.com does not match 'Received'
 headers
 0.0 FREEMAIL_FROM          Sender email is commonly abused enduser mail
 provider (lenbok[at]gmail.com)
 -0.0 SPF_HELO_PASS          SPF: HELO matches SPF record
 0.0 HTML_MESSAGE           BODY: HTML included in message
X-Debbugs-Envelope-To: submit
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 (+)

--00000000000051c1e8065bd0253b
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

While trying to reproduce some multiple terminal tty-child-frame issues I
have
previously experienced, I encountered this bug, which seems a general
multi-tty issue. Opening a new emacsclient in a terminal but not sending it
input, would cause input in another emacsclient to send the minibuffer
to the wrong frame (i.e. to the new emacsclient).

To reproduce, first start emacs in one terminal:

emacs -nw -Q
M-x server-start RET

In a second terminal, connect a client, but do not send it input:

emacsclient -nw

Back in the first terminal (the original emacs -nw), invoke any command
that reads from the minibuffer, e.g.:

M-x

The minibuffer session opens on the second terminal's frame (the emacsclien=
t
frame), not on the first terminal where the command was actually typed. The
first terminal's mode line goes inactive and further keystrokes there are
rejected with:

Frame is locked; see 'multiple-terminals-merge-keyboards' variable


* If any input is sent to the new emacsclient, the bug does not occur.

* If instead of leaving the fresh emacsclient idle, it's closed (C-x 5
  0) and a new emacsclient -nw is started on the same terminal (still
  without sending it input), the subsequent M-x in the first terminal
  does not trigger the bug.


I used an LLM to provide a starting point for the cause, and it
suggests that the sequence of events is:

=E2=80=A2 server--create-frame in lisp/server.el unconditionally calls
(select-frame frame) on every newly created client frame, with no coupling
to which terminal actually has focus.
=E2=80=A2 do_switch_frame in src/frame.c sets the global selected_frame to =
this new
frame, but for tty frames specifically it deliberately skips resetting
internal_last_event_frame (guarded by if (!is_tty_frame (f)) around what is
currently line 2090; comment references a prior fix for an unrelated
switch-frame/post-command-hook infinite loop). selected_frame,
internal_last_event_frame, and current_kboard are all single, process-wide
globals, not per-terminal state.
=E2=80=A2 choose_minibuf_frame in src/minibuf.c (used by every minibuffer-r=
eading
command) picks the minibuffer window from whatever selected_frame currently
is, with no reference to which terminal's keystroke triggered the read.
=E2=80=A2 temporarily_switch_to_single_kboard, called from read_minibuf in
src/minibuf.c, then locks the current keyboard to that same (wrong) frame's
terminal =E2=80=94 which is the direct cause of the "Frame is locked" messa=
ge on
the original terminal.

Hopefully someone familiar with these systems has an idea what and
appropriate fix might be.

Cheers,
Len




In GNU Emacs 31.1.50 (build 1, x86_64-pc-linux-gnu, X toolkit, Xaw3d
 scroll bars) of 2026-09-19 built on kaka
Repository revision: 911a9ac2f8cbb3832483ba3a25023dcf12c59653
Repository branch: emacs-31
System Description: Ubuntu 26.04.1 LTS

Configured using:
 'configure --prefix=3D/home/len/.local --with-rsvg --with-cairo
 --with-native-compilation --with-xinput2 --with-tree-sitter
 --with-modules'

Configured features:
ACL DBUS GIF GLIB GMP GNUTLS GPM GSETTINGS JPEG LCMS2 LIBSYSTEMD LIBXML2
MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG SECCOMP SOUND SQLITE3
THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XAW3D XDBE XIM
XINPUT2 XPM LUCID ZLIB

Important settings:
  value of $LC_MONETARY: en_AU.UTF-8
  value of $LC_NUMERIC: en_AU.UTF-8
  value of $LC_TIME: en_AU.UTF-8
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: OpenCode

Minor modes in effect:
  global-jinx-mode: t
  display-time-mode: t
  global-clipetty-mode: t
  clipetty-mode: t
  global-atomic-chrome-edit-mode: t
  org-msg-mode: t
  agent-shell-attention-mode: t
  agent-shell-ui-mode: t
  cursor-sensor-mode: t
  agent-shell-completion-mode: t
  agent-shell-chat-mode: t
  global-completion-preview-mode: t
  completion-preview-mode: t
  global-treesit-auto-mode: t
  transient-posframe-mode: t
  fancy-compilation-mode: t
  kitty-graphics-mode: t
  projectile-mode: t
  corfu-popupinfo-mode: t
  corfu-prescient-mode: t
  global-corfu-mode: t
  corfu-mode: t
  smartparens-global-mode: t
  smartparens-mode: t
  editorconfig-mode: t
  term-keys-mode: t
  diredfl-global-mode: t
  global-mise-mode: t
  mise-mode: t
  global-flycheck-eglot-mode: t
  nerd-icons-completion-mode: t
  marginalia-mode: t
  vertico-prescient-mode: t
  vertico-posframe-mode: t
  vertico-multiform-mode: t
  vertico-mode: t
  treemacs-filewatch-mode: t
  treemacs-follow-mode: t
  treemacs-git-mode: t
  treemacs-fringe-indicator-mode: t
  nerd-icons-xref-mode: t
  global-ligature-mode: t
  ligature-mode: t
  diff-hl-margin-mode: t
  global-diff-hl-mode: t
  modus-themes-include-derivatives-mode: t
  gcmh-mode: t
  ultra-scroll-mode: t
  pixel-scroll-precision-mode: t
  global-auto-revert-mode: t
  savehist-mode: t
  xterm-mouse-mode: t
  repeat-mode: t
  elpaca-use-package-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  minibuffer-nonselected-mode: t
  minibuffer-regexp-mode: t
  column-number-mode: t
  line-number-mode: t
  visual-line-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
/home/len/.emacs.d/elpaca/builds/corfu/corfu-quick hides
/home/len/.emacs.d/elpaca/repos/corfu/extensions/corfu-quick
/home/len/.emacs.d/elpaca/builds/corfu/corfu-popupinfo hides
/home/len/.emacs.d/elpaca/repos/corfu/extensions/corfu-popupinfo
/home/len/.emacs.d/elpaca/builds/corfu/corfu-history hides
/home/len/.emacs.d/elpaca/repos/corfu/extensions/corfu-history
/home/len/.emacs.d/elpaca/builds/corfu/corfu-indexed hides
/home/len/.emacs.d/elpaca/repos/corfu/extensions/corfu-indexed
/home/len/.emacs.d/elpaca/builds/corfu/corfu-auto hides
/home/len/.emacs.d/elpaca/repos/corfu/extensions/corfu-auto
/home/len/.emacs.d/elpaca/builds/corfu/corfu-info hides
/home/len/.emacs.d/elpaca/repos/corfu/extensions/corfu-info
/home/len/.emacs.d/elpaca/builds/corfu/corfu-mouse hides
/home/len/.emacs.d/elpaca/repos/corfu/extensions/corfu-mouse
/home/len/.emacs.d/elpaca/builds/corfu/corfu-echo hides
/home/len/.emacs.d/elpaca/repos/corfu/extensions/corfu-echo
/home/len/.emacs.d/elpaca/builds/vertico/vertico-reverse hides
/home/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-reverse
/home/len/.emacs.d/elpaca/builds/vertico/vertico-flat hides
/home/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-flat
/home/len/.emacs.d/elpaca/builds/vertico/vertico-grid hides
/home/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-grid
/home/len/.emacs.d/elpaca/builds/vertico/vertico-suspend hides
/home/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-suspend
/home/len/.emacs.d/elpaca/builds/vertico/vertico-directory hides
/home/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-directory
/home/len/.emacs.d/elpaca/builds/vertico/vertico-repeat hides
/home/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-repeat
/home/len/.emacs.d/elpaca/builds/vertico/vertico-multiform hides
/home/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-multiform
/home/len/.emacs.d/elpaca/builds/vertico/vertico-buffer hides
/home/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-buffer
/home/len/.emacs.d/elpaca/builds/vertico/vertico-indexed hides
/home/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-indexed
/home/len/.emacs.d/elpaca/builds/vertico/vertico-sort hides
/home/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-sort
/home/len/.emacs.d/elpaca/builds/vertico/vertico-unobtrusive hides
/home/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-unobtrusive
/home/len/.emacs.d/elpaca/builds/vertico/vertico-mouse hides
/home/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-mouse
/home/len/.emacs.d/elpaca/builds/vertico/vertico-quick hides
/home/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-quick
/home/len/.emacs.d/elpaca/builds/editorconfig/editorconfig-core-handle
hides /home/len/.local/share/emacs/31.1.50/lisp/editorconfig-core-handle
/home/len/.emacs.d/elpaca/builds/transient/transient hides
/home/len/.local/share/emacs/31.1.50/lisp/transient
/home/len/.emacs.d/elpaca/builds/editorconfig/editorconfig-conf-mode hides
/home/len/.local/share/emacs/31.1.50/lisp/editorconfig-conf-mode
/home/len/.emacs.d/elpaca/builds/ef-themes/theme-loaddefs hides
/home/len/.local/share/emacs/31.1.50/lisp/theme-loaddefs
/home/len/.emacs.d/elpaca/builds/editorconfig/editorconfig-tools hides
/home/len/.local/share/emacs/31.1.50/lisp/editorconfig-tools
/home/len/.emacs.d/elpaca/builds/editorconfig/editorconfig hides
/home/len/.local/share/emacs/31.1.50/lisp/editorconfig
/home/len/.emacs.d/elpaca/builds/editorconfig/editorconfig-core hides
/home/len/.local/share/emacs/31.1.50/lisp/editorconfig-core
/home/len/.emacs.d/elpaca/builds/editorconfig/editorconfig-fnmatch hides
/home/len/.local/share/emacs/31.1.50/lisp/editorconfig-fnmatch
/home/len/.emacs.d/elpaca/builds/lua-mode/lua-mode hides
/home/len/.local/share/emacs/31.1.50/lisp/progmodes/lua-mode
/home/len/.emacs.d/elpaca/builds/org/org-persist hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-persist
/home/len/.emacs.d/elpaca/builds/org/ob-python hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-python
/home/len/.emacs.d/elpaca/builds/org/org-lint hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-lint
/home/len/.emacs.d/elpaca/builds/org/ob-exp hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-exp
/home/len/.emacs.d/elpaca/builds/org/org-loaddefs hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-loaddefs
/home/len/.emacs.d/elpaca/builds/org/org-cycle hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-cycle
/home/len/.emacs.d/elpaca/builds/org/ob-latex hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-latex
/home/len/.emacs.d/elpaca/builds/org/org-clock hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-clock
/home/len/.emacs.d/elpaca/builds/org/ol-bbdb hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ol-bbdb
/home/len/.emacs.d/elpaca/builds/org/org-fold-core hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-fold-core
/home/len/.emacs.d/elpaca/builds/org/ob-processing hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-processing
/home/len/.emacs.d/elpaca/builds/org/ob-tangle hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-tangle
/home/len/.emacs.d/elpaca/builds/org/org-element hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-element
/home/len/.emacs.d/elpaca/builds/org/ox-icalendar hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ox-icalendar
/home/len/.emacs.d/elpaca/builds/org/ol-eww hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ol-eww
/home/len/.emacs.d/elpaca/builds/org/org-tempo hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-tempo
/home/len/.emacs.d/elpaca/builds/org/ob-dot hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-dot
/home/len/.emacs.d/elpaca/builds/org/ob-emacs-lisp hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-emacs-lisp
/home/len/.emacs.d/elpaca/builds/org/ob-perl hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-perl
/home/len/.emacs.d/elpaca/builds/org/ob-gnuplot hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-gnuplot
/home/len/.emacs.d/elpaca/builds/org/org-footnote hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-footnote
/home/len/.emacs.d/elpaca/builds/org/org-faces hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-faces
/home/len/.emacs.d/elpaca/builds/org/org-agenda hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-agenda
/home/len/.emacs.d/elpaca/builds/org/ox-html hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ox-html
/home/len/.emacs.d/elpaca/builds/org/ob-lilypond hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-lilypond
/home/len/.emacs.d/elpaca/builds/org/ob-calc hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-calc
/home/len/.emacs.d/elpaca/builds/org/ob-clojure hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-clojure
/home/len/.emacs.d/elpaca/builds/org/ol-mhe hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ol-mhe
/home/len/.emacs.d/elpaca/builds/org/oc-biblatex hides
/home/len/.local/share/emacs/31.1.50/lisp/org/oc-biblatex
/home/len/.emacs.d/elpaca/builds/org/ob-awk hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-awk
/home/len/.emacs.d/elpaca/builds/org/org-archive hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-archive
/home/len/.emacs.d/elpaca/builds/org/ol-w3m hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ol-w3m
/home/len/.emacs.d/elpaca/builds/org/org-habit hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-habit
/home/len/.emacs.d/elpaca/builds/org/org-macs hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-macs
/home/len/.emacs.d/elpaca/builds/org/org-refile hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-refile
/home/len/.emacs.d/elpaca/builds/org/ob-scheme hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-scheme
/home/len/.emacs.d/elpaca/builds/org/ob-sql hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-sql
/home/len/.emacs.d/elpaca/builds/org/ox hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ox
/home/len/.emacs.d/elpaca/builds/org/org-entities hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-entities
/home/len/.emacs.d/elpaca/builds/org/ol-man hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ol-man
/home/len/.emacs.d/elpaca/builds/org/ob-eval hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-eval
/home/len/.emacs.d/elpaca/builds/org/ob-lua hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-lua
/home/len/.emacs.d/elpaca/builds/org/ox-publish hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ox-publish
/home/len/.emacs.d/elpaca/builds/org/ox-koma-letter hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ox-koma-letter
/home/len/.emacs.d/elpaca/builds/org/org-num hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-num
/home/len/.emacs.d/elpaca/builds/org/org-attach-git hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-attach-git
/home/len/.emacs.d/elpaca/builds/org/org-src hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-src
/home/len/.emacs.d/elpaca/builds/org/ob-forth hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-forth
/home/len/.emacs.d/elpaca/builds/org/ob-csharp hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-csharp
/home/len/.emacs.d/elpaca/builds/org/ol-eshell hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ol-eshell
/home/len/.emacs.d/elpaca/builds/org/ox-org hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ox-org
/home/len/.emacs.d/elpaca/builds/org/ob-lisp hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-lisp
/home/len/.emacs.d/elpaca/builds/org/org-attach hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-attach
/home/len/.emacs.d/elpaca/builds/org/ob-screen hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-screen
/home/len/.emacs.d/elpaca/builds/org/org-inlinetask hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-inlinetask
/home/len/.emacs.d/elpaca/builds/org/ob-R hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-R
/home/len/.emacs.d/elpaca/builds/org/ol-docview hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ol-docview
/home/len/.emacs.d/elpaca/builds/org/org-pcomplete hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-pcomplete
/home/len/.emacs.d/elpaca/builds/org/ob-makefile hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-makefile
/home/len/.emacs.d/elpaca/builds/org/ox-beamer hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ox-beamer
/home/len/.emacs.d/elpaca/builds/org/org-fold hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-fold
/home/len/.emacs.d/elpaca/builds/org/ob-C hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-C
/home/len/.emacs.d/elpaca/builds/org/org-colview hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-colview
/home/len/.emacs.d/elpaca/builds/org/oc-natbib hides
/home/len/.local/share/emacs/31.1.50/lisp/org/oc-natbib
/home/len/.emacs.d/elpaca/builds/org/org-plot hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-plot
/home/len/.emacs.d/elpaca/builds/org/ob-ditaa hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-ditaa
/home/len/.emacs.d/elpaca/builds/org/oc-bibtex hides
/home/len/.local/share/emacs/31.1.50/lisp/org/oc-bibtex
/home/len/.emacs.d/elpaca/builds/org/ob-julia hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-julia
/home/len/.emacs.d/elpaca/builds/org/org-feed hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-feed
/home/len/.emacs.d/elpaca/builds/org/org hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org
/home/len/.emacs.d/elpaca/builds/org/ob-haskell hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-haskell
/home/len/.emacs.d/elpaca/builds/org/oc-basic hides
/home/len/.local/share/emacs/31.1.50/lisp/org/oc-basic
/home/len/.emacs.d/elpaca/builds/org/ob-octave hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-octave
/home/len/.emacs.d/elpaca/builds/org/ob-java hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-java
/home/len/.emacs.d/elpaca/builds/org/org-ctags hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-ctags
/home/len/.emacs.d/elpaca/builds/org/org-protocol hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-protocol
/home/len/.emacs.d/elpaca/builds/org/org-list hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-list
/home/len/.emacs.d/elpaca/builds/org/ob-groovy hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-groovy
/home/len/.emacs.d/elpaca/builds/org/ob-fortran hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-fortran
/home/len/.emacs.d/elpaca/builds/org/org-datetree hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-datetree
/home/len/.emacs.d/elpaca/builds/org/ox-ascii hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ox-ascii
/home/len/.emacs.d/elpaca/builds/org/ol-gnus hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ol-gnus
/home/len/.emacs.d/elpaca/builds/org/ob-ruby hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-ruby
/home/len/.emacs.d/elpaca/builds/org/ol-rmail hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ol-rmail
/home/len/.emacs.d/elpaca/builds/org/ob-lob hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-lob
/home/len/.emacs.d/elpaca/builds/org/ob-js hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-js
/home/len/.emacs.d/elpaca/builds/org/ol-irc hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ol-irc
/home/len/.emacs.d/elpaca/builds/org/ob hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob
/home/len/.emacs.d/elpaca/builds/org/ob-maxima hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-maxima
/home/len/.emacs.d/elpaca/builds/org/oc hides
/home/len/.local/share/emacs/31.1.50/lisp/org/oc
/home/len/.emacs.d/elpaca/builds/org/org-timer hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-timer
/home/len/.emacs.d/elpaca/builds/org/ol-info hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ol-info
/home/len/.emacs.d/elpaca/builds/org/ox-odt hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ox-odt
/home/len/.emacs.d/elpaca/builds/org/ol-doi hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ol-doi
/home/len/.emacs.d/elpaca/builds/org/org-id hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-id
/home/len/.emacs.d/elpaca/builds/org/ob-core hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-core
/home/len/.emacs.d/elpaca/builds/org/ox-md hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ox-md
/home/len/.emacs.d/elpaca/builds/org/org-indent hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-indent
/home/len/.emacs.d/elpaca/builds/org/ob-eshell hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-eshell
/home/len/.emacs.d/elpaca/builds/org/ol-bibtex hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ol-bibtex
/home/len/.emacs.d/elpaca/builds/org/ob-matlab hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-matlab
/home/len/.emacs.d/elpaca/builds/org/ob-sqlite hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-sqlite
/home/len/.emacs.d/elpaca/builds/org/org-goto hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-goto
/home/len/.emacs.d/elpaca/builds/org/org-table hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-table
/home/len/.emacs.d/elpaca/builds/org/ob-org hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-org
/home/len/.emacs.d/elpaca/builds/org/ob-css hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-css
/home/len/.emacs.d/elpaca/builds/org/org-capture hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-capture
/home/len/.emacs.d/elpaca/builds/org/org-element-ast hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-element-ast
/home/len/.emacs.d/elpaca/builds/org/ob-table hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-table
/home/len/.emacs.d/elpaca/builds/org/org-macro hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-macro
/home/len/.emacs.d/elpaca/builds/org/org-crypt hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-crypt
/home/len/.emacs.d/elpaca/builds/org/ob-ref hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-ref
/home/len/.emacs.d/elpaca/builds/org/oc-csl hides
/home/len/.local/share/emacs/31.1.50/lisp/org/oc-csl
/home/len/.emacs.d/elpaca/builds/org/ob-sass hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-sass
/home/len/.emacs.d/elpaca/builds/org/ol hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ol
/home/len/.emacs.d/elpaca/builds/org/ob-shell hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-shell
/home/len/.emacs.d/elpaca/builds/org/ob-plantuml hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-plantuml
/home/len/.emacs.d/elpaca/builds/org/org-duration hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-duration
/home/len/.emacs.d/elpaca/builds/org/ox-latex hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ox-latex
/home/len/.emacs.d/elpaca/builds/org/org-mobile hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-mobile
/home/len/.emacs.d/elpaca/builds/org/org-mouse hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-mouse
/home/len/.emacs.d/elpaca/builds/org/org-version hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-version
/home/len/.emacs.d/elpaca/builds/org/org-keys hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-keys
/home/len/.emacs.d/elpaca/builds/org/ob-comint hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-comint
/home/len/.emacs.d/elpaca/builds/org/ob-sed hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-sed
/home/len/.emacs.d/elpaca/builds/org/org-compat hides
/home/len/.local/share/emacs/31.1.50/lisp/org/org-compat
/home/len/.emacs.d/elpaca/builds/org/ob-ocaml hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ob-ocaml
/home/len/.emacs.d/elpaca/builds/org/ox-texinfo hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ox-texinfo
/home/len/.emacs.d/elpaca/builds/org/ox-man hides
/home/len/.local/share/emacs/31.1.50/lisp/org/ox-man
/home/len/.emacs.d/elpaca/builds/compat/compat hides
/home/len/.local/share/emacs/31.1.50/lisp/emacs-lisp/compat
/home/len/.emacs.d/elpaca/builds/eldoc/eldoc hides
/home/len/.local/share/emacs/31.1.50/lisp/emacs-lisp/eldoc

Features:
(shadow sort mail-extr emacsbug vc-git markdown-ts-appear toml-ts-mode
yaml-ts-mode html-ts-mode markdown-ts-mode-x markdown-ts-mode
system-sleep tramp-archive tramp-gvfs zeroconf jinx term/xterm xterm
avoid time clipetty atomic-chrome python-pytest python-x folding-isearch
folding py-isort python-black reformatter blacken conda em-dirs esh-mode
esh-var eshell esh-cmd esh-ext esh-proc esh-opt esh-io esh-arg
esh-module esh-module-loaddefs esh-util pythonic pet yaml f groovy-mode
kotlin-mode kotlin-mode-indent kotlin-mode-lexer dna-mode
consult-notmuch notmuch notmuch-tree notmuch-jump notmuch-hello
notmuch-show notmuch-print notmuch-crypto notmuch-mua notmuch-message
notmuch-draft notmuch-maildir-fcc notmuch-address notmuch-company
notmuch-parser notmuch-wash coolj goto-addr notmuch-tag crm notmuch-lib
notmuch-compat org-msg htmlize gnus-msg gnus-icalendar icalendar-utils
icalendar-parser icalendar-ast icalendar diary-lib diary-loaddefs
gnus-dired gnus-cite gnus-art mm-uu mml2015 mm-view mml-smime smime dig
gnus-sum gnus-group gnus-undo gnus-start gnus-cloud nnimap nnmail
mail-source utf7 nnoo gnus-spec gnus-int gnus-range message sendmail
yank-media rfc822 mml mml-sec epa epg rfc6068 epg-config mm-decode
mm-bodies mm-encode mailabbrev gmm-utils gnus-win ement
ement-notifications ement-notify notifications ement-room ement-lib
ement-api ement-structs ement-macros magit-section plz dns time-zones
monet agent-shell-attention agent-shell agent-shell-xai
agent-shell-viewport agent-shell-list-edit agent-shell-ui cursor-sensor
agent-shell-worktree agent-shell-usage agent-shell-styles
agent-shell-qwen agent-shell-pi agent-shell-opencode agent-shell-openai
agent-shell-omp agent-shell-mistral agent-shell-kiro agent-shell-kimi
agent-shell-hermes agent-shell-active-message agent-shell-heartbeat
agent-shell-goose agent-shell-google agent-shell-github
agent-shell-droid agent-shell-experimental agent-shell-dnd
agent-shell-prompt-queue agent-shell-prompt agent-shell-diff
agent-shell-devcontainer agent-shell-cursor agent-shell-config
agent-shell-completion agent-shell-project agent-shell-cline
agent-shell-codebuddy agent-shell-chat-mode agent-shell-auggie
agent-shell-anthropic agent-shell-antigravity agent-shell-markdown
agent-shell-faces agent-shell-artist artist picture reporter
agent-shell-work-buffer acp acp-traffic shell-maker pcsv remoto
ghub-graphql treepy gsexp ghub let-alist gnutls emacs-everywhere
spookfox-tabs spookfox ox-pandoc ox-org ox-odt rng-loc rng-uri rng-parse
rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok
nxml-util ox-latex ox-icalendar ox-html table ox-ascii ox-publish ox
org-attach org-projectile org-project-capture
org-project-capture-backend org-category-capture org-capture org-agenda
org-element org-persist org-id avl-tree org-refile ob-sql ob-dot
ob-plantuml ob-gnuplot ob-js ob-python ob-awk ob-shell smartparens-org
completion-preview org ob ob-tangle ob-ref ob-lob ob-table ob-exp
org-macro org-src ob-comint org-element-ast org-pcomplete org-list
org-footnote org-faces org-entities ob-emacs-lisp ob-core ob-eval
org-cycle ol org-fold cal-menu calendar cal-loaddefs breadcrumb
flycheck-eglot eglot-java eglot tree-widget external-completion jsonrpc
diff ert debug backtrace just-mode jupyter jupyter-server
jupyter-server-kernel jupyter-rest-api url-http url-auth mail-parse
rfc2231 rfc2047 rfc2045 ietf-drums url-gw nsm jupyter-repl
jupyter-widget-client websocket bindat jupyter-client jupyter-kernel
jupyter-kernelspec jupyter-env jupyter-monads jupyter-messages hmac-def
jupyter-mime jupyter-base restclient svelte-mode
display-fill-column-indicator display-line-numbers
highlight-indent-guides outli ws-butler symbol-overlay css-mode eww
vtable url-queue mm-url gnus nnheader gnus-util range mm-util mail-prsvr
typescript-mode ejc-sql ejc-completion-common ejc-doc ejc-interaction
clomacs simple-httpd smartparens-clojure cider cider-doctor cider-debug
cider-browse-ns cider-mode cider-xref-backend cider-xref-source
cider-find cider-completion cider-enlighten cider-profile
cider-inspector cider-ns-state cider-eval cider-connection
cider-repl-history cider-history cider-repl cider-test cider-resolve
cider-compilation cider-stacktrace cider-overlays cider-doc
cider-browse-spec cider-tree-view cider-clojuredocs cider-popup
cider-jack-in cider-inspiration cider-endpoint tramp-sh cider-eldoc
cider-docstring shr pixel-fill kinsoku url-file puny cider-cljs
cider-client cider-completion-context cider-session cider-common
cider-util clojure-mode lisp-mnt align sesman-browser nrepl-client
nrepl-bencode nrepl-dict queue spinner parseedn parseclj-parser
parseclj-lex parseclj-alist sesman net-utils ejc-eldoc ejc-format
ejc-result-buffer ejc-result-mode cua-base ejc-lib org-table
org-fold-core org-keys oc org-compat org-version org-macs sql view
php-mode php-style php-indent php-face php php-project php-keywords
php-core flymake eldev eldev-util smartparens-go go-mode find-file ffap
js2-mode etags smartparens-javascript js smartparens-rust rust-utils
rust-prog-mode rust-mode rust-playpen rust-cargo rust-common
rust-rustfmt rust-compile smartparens-lua lua-mode snakemake-mode
smartparens-python python gnuplot info-look info scad-dbus dbus
scad-mode treesit-auto quarto-mode mode-local poly-markdown
smartparens-markdown markdown-mode polymode derived poly-lock
polymode-base polymode-weave polymode-export polymode-compat
polymode-methods polymode-core polymode-classes eieio-custom eieio-base
plantuml-mode deflate graphviz-dot-mode graphviz-dot-flycheck
multi-web-mode dts-mode dockerfile-mode sh-script smie executable
transient-posframe transient llama devcontainer tramp-container
fancy-compilation kitty-graphics ghostel ghostel-shell
ghostel-module-install ghostel-links ghostel-line-mode ghostel-kitty
ghostel-faces projectile noutline outline fileloop generator ibuffer-vc
ibuf-ext ibuffer ibuffer-loaddefs apheleia apheleia-rcs apheleia-dp
apheleia-formatters apheleia-utils apheleia-log
apheleia-formatter-context yasnippet-capf cape kind-icon svg-lib svg xml
corfu-popupinfo corfu-prescient corfu py-snippets multiple-cursors
mc-separate-operations rectangular-region-mode mc-mark-pop mc-edit-lines
mc-hide-unmatched-lines-mode mc-mark-more smartparens-html sgml-mode
facemenu dom mc-cycle-cursors multiple-cursors-core sudo-edit
tramp-cache time-stamp tramp trampver tramp-integration files-x
tramp-message tramp-compat shell pcomplete parse-time iso8601 time-date
tramp-loaddefs wgrep-ag wgrep grep rectangle-utils rect
smartparens-config smartparens-text smartparens-c smartparens thingatpt
dtrt-indent editorconfig editorconfig-core editorconfig-core-handle
editorconfig-fnmatch term-keys vundo dirvish diredfl dired-hide-dotfiles
mise inheritenv dumb-jump consult-yasnippet yasnippet consult-flycheck
flycheck find-func affe server consult treemacs-bookmarks treemacs-tags
imenu bookmark nerd-icons-completion marginalia vertico-prescient
prescient char-fold vertico-posframe vertico-multiform vertico-directory
vertico-reverse vertico counsel request mailheader mail-utils swiper ivy
ivy-faces colir disp-table posframe point-stack move-text hydra lv
keycast format-spec cond-let compat treemacs-nerd-icons treemacs
treemacs-header-line treemacs-compatibility treemacs-mode
treemacs-interface treemacs-persistence eldoc treemacs-filewatch-mode
treemacs-follow-mode treemacs-rendering treemacs-annotations
treemacs-async treemacs-workspaces treemacs-dom treemacs-visuals
treemacs-fringe-indicator treemacs-faces treemacs-icons treemacs-scope
treemacs-themes treemacs-core-utils pfuture inline hl-line ht
treemacs-logging treemacs-customization treemacs-macros nerd-icons-xref
xref project ligature diff-hl-margin diff-hl-dired diff-hl log-view
log-edit add-log pcvs-util vc-dir ewoc diff-mode track-changes
rainbow-mode xterm-color spaceline-config spaceline-segments nerd-icons
nerd-icons-faces nerd-icons-data nerd-icons-data-mdicon
nerd-icons-data-flicon nerd-icons-data-codicon nerd-icons-data-devicon
nerd-icons-data-sucicon nerd-icons-data-wicon nerd-icons-data-faicon
nerd-icons-data-powerline nerd-icons-data-octicon
nerd-icons-data-pomicon nerd-icons-data-ipsicon s spaceline powerline
powerline-separators powerline-themes dash ef-elea-dark-theme ef-themes
modus-themes auto-minor-mode diminish try package browse-url
url-handlers package-activate gcmh ultra-scroll pixel-scroll
python-pytest-autoloads python-x-autoloads folding-autoloads
sphinx-doc-autoloads py-isort-autoloads python-black-autoloads
reformatter-autoloads blacken-autoloads conda-autoloads
pythonic-autoloads pet-autoloads nextflow-mode-autoloads
groovy-mode-autoloads kotlin-mode-autoloads dna-mode-autoloads
consult-notmuch-autoloads notmuch-autoloads org-msg-autoloads
htmlize-autoloads ement-autoloads taxy-magit-section-autoloads
taxy-autoloads persist-autoloads slack-autoloads alert-autoloads
log4e-autoloads gntp-autoloads ts-autoloads emojify-autoloads
circe-autoloads eradio-autoloads time-zones-autoloads
claude-code-autoloads monet-autoloads relysium-autoloads gptel-autoloads
agent-shell-attention-autoloads agent-shell-sidebar-autoloads
agent-shell-hq-autoloads persp-mode-autoloads agent-shell-autoloads
acp-autoloads shell-maker-autoloads pcsv-autoloads remoto-autoloads
atomic-chrome-autoloads emacs-everywhere-autoloads spookfox-autoloads
counsel-keepassxc-autoloads lsp-ui-autoloads lsp-mode-autoloads
f-autoloads breadcrumb-autoloads sideline-flycheck-autoloads
sideline-autoloads flycheck-eglot-autoloads eglot-java-autoloads
just-mode-autoloads code-cells-autoloads jupyter-autoloads
websocket-autoloads zmq-autoloads restclient-autoloads
svelte-mode-autoloads typescript-mode-autoloads ejc-sql-autoloads
clomacs-autoloads cider-autoloads spinner-autoloads
simple-httpd-autoloads sesman-autoloads queue-autoloads
parseedn-autoloads parseclj-autoloads clojure-mode-autoloads
php-mode-autoloads eldev-autoloads eldoc-autoloads go-mode-autoloads
js2-mode-autoloads rust-mode-autoloads lua-mode-autoloads
snakemake-mode-autoloads gnuplot-autoloads scad-dbus-autoloads
scad-mode-autoloads treesit-auto-autoloads quarto-mode-autoloads
poly-markdown-autoloads polymode-autoloads markdown-ts-appear-autoloads
plantuml-mode-autoloads deflate-autoloads graphviz-dot-mode-autoloads
ox-pandoc-autoloads org-projectile-autoloads
org-project-capture-autoloads org-category-capture-autoloads
org-pretty-table-autoloads org-bullets-autoloads
org-hide-drawers-autoloads org-appear-autoloads org-download-autoloads
async-autoloads org-loaddefs multi-web-mode-autoloads
yaml-mode-autoloads terraform-mode-autoloads hcl-mode-autoloads
dts-mode-autoloads csv-mode-autoloads dockerfile-mode-autoloads
git-timemachine-autoloads git-messenger-autoloads popup-autoloads
majutsu-autoloads plz-autoloads forge-autoloads yaml-autoloads
markdown-mode-autoloads ghub-autoloads treepy-autoloads closql-autoloads
emacsql-autoloads magit-blame-color-by-age-autoloads
treemacs-magit-autoloads magit-autoloads with-editor-autoloads
magit-section-autoloads transient-posframe-autoloads transient-autoloads
llama-autoloads conventional-commit-autoloads devcontainer-autoloads
fancy-compilation-autoloads kitty-graphics-autoloads
xterm-color-autoloads eat-autoloads ghostel-autoloads
projectile-autoloads apheleia-autoloads jinx-autoloads
consult-flycheck-autoloads flycheck-autoloads yasnippet-capf-autoloads
cape-autoloads kind-icon-autoloads svg-lib-autoloads
corfu-terminal-autoloads popon-autoloads corfu-prescient-autoloads
corfu-autoloads py-snippets-autoloads consult-yasnippet-autoloads
yasnippet-autoloads multiple-cursors-autoloads iedit-autoloads
sudo-edit-autoloads visual-regexp-autoloads wgrep-ag-autoloads
wgrep-autoloads rectangle-utils-autoloads smartparens-autoloads
ws-butler-autoloads dtrt-indent-autoloads editorconfig-autoloads
expand-region-autoloads clipetty-autoloads term-keys-autoloads
vundo-autoloads dirvish-autoloads dired-dragon-autoloads
dired-git-info-autoloads diredfl-autoloads dired-subtree-autoloads
dired-hacks-utils-autoloads dired-du-autoloads
dired-hide-dotfiles-autoloads mise-autoloads inheritenv-autoloads
ibuffer-vc-autoloads dumb-jump-autoloads embark-consult-autoloads
embark-autoloads affe-autoloads consult-autoloads marginalia-autoloads
vertico-prescient-autoloads prescient-autoloads
vertico-posframe-autoloads vertico-autoloads counsel-autoloads
request-autoloads swiper-autoloads ivy-autoloads
treemacs-nerd-icons-autoloads treemacs-autoloads ace-window-autoloads
avy-autoloads cfrs-autoloads posframe-autoloads point-stack-autoloads
crux-autoloads move-text-autoloads hydra-autoloads lv-autoloads
outli-autoloads keycast-autoloads cond-let-autoloads ht-autoloads
pfuture-autoloads nerd-icons-ibuffer-autoloads nerd-icons-xref-autoloads
nerd-icons-dired-autoloads nerd-icons-completion-autoloads
compat-autoloads nerd-icons-autoloads ligature-autoloads
symbol-overlay-autoloads highlight-indent-guides-autoloads
diff-hl-autoloads rainbow-mode-autoloads spaceline-autoloads s-autoloads
dash-autoloads powerline-autoloads ef-themes-autoloads
modus-themes-autoloads auto-minor-mode-autoloads diminish-autoloads
try-autoloads mixed-pitch-autoloads transpose-frame-autoloads
gcmh-autoloads ultra-scroll-autoloads generic loadhist csharp-mode
c-ts-common cc-langs cc-mode cc-fonts cc-guess cc-menus cc-cmds
cc-styles cc-align cc-engine cc-vars cc-defs compile
text-property-search comint ansi-osc ansi-color ring conf-mode treesit
cus-edit pp cus-start cus-load wid-edit vc vc-dispatcher dabbrev
image-dired image-dired-tags image-dired-external image-dired-util xdg
image-mode exif dired dired-loaddefs midnight autorevert filenotify
savehist ediff ediff-merg ediff-mult ediff-wind ediff-diff ediff-help
ediff-init ediff-util whitespace elpaca-menu-elpa advice pulse
face-remap color elpaca-menu-melpa 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 json map
url-vars mailcap elpaca-menu-org xt-mouse repeat comp comp-cstr subr-x
mule-util comp-run comp-common rx edmacro kmacro pcase cl-extra
help-mode cl-macs elpaca-use-package use-package use-package-ensure
use-package-delight use-package-diminish use-package-bind-key bind-key
easy-mmode use-package-core elpaca-use-package-autoloads cl-seq byte-opt
gv bytecomp byte-compile elpaca-git elpaca warnings icons elpaca-process
cl-loaddefs cl-lib elpaca-autoloads rmc iso-transl tooltip cconv paren
electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/x-win x-win term/common-win x-dnd touch-screen 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 dbusbind inotify lcms2
dynamic-setting x-toolkit xinput2 x multi-tty move-toolbar
make-network-process tty-child-frames native-compile emacs)

Memory information:
((conses 16 1776894 1225101) (symbols 48 95430 233) (strings 32 497290
110775) (string-bytes 1 14508590)
 (vectors 16 142741) (vector-slots 8 2529775 416765) (floats 8 2185 6630)
(intervals 56 15711 23130)
 (buffers 1064 20))

--00000000000051c1e8065bd0253b
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">While trying to reproduce some multiple terminal tty-child=
-frame issues I have<br>previously experienced, I encountered this bug, whi=
ch seems a general<br>multi-tty issue. Opening a new emacsclient in a termi=
nal but not sending it<br>input, would cause input in another emacsclient t=
o send the minibuffer<br>to the wrong frame (i.e. to the new emacsclient).<=
br><br>To reproduce, first start emacs in one terminal:<br><br>emacs -nw -Q=
<br>M-x server-start RET<br><br>In a second terminal, connect a client, but=
 do not send it input:<br><br>emacsclient -nw<br><br>Back in the first term=
inal (the original emacs -nw), invoke any command<br>that reads from the mi=
nibuffer, e.g.:<br><br>M-x<br><br>The minibuffer session opens on the secon=
d terminal&#39;s frame (the emacsclient<br>frame), not on the first termina=
l where the command was actually typed. The<br>first terminal&#39;s mode li=
ne goes inactive and further keystrokes there are<br>rejected with:<br><br>=
Frame is locked; see &#39;multiple-terminals-merge-keyboards&#39; variable<=
br><br><br>* If any input is sent to the new emacsclient, the bug does not =
occur.<br><br>* If instead of leaving the fresh emacsclient idle, it&#39;s =
closed (C-x 5<br>=C2=A0 0) and a new emacsclient -nw is started on the same=
 terminal (still<br>=C2=A0 without sending it input), the subsequent M-x in=
 the first terminal<br>=C2=A0 does not trigger the bug.<br><br><br>I used a=
n LLM to provide a starting point for the cause, and it<br>suggests that th=
e sequence of events is:<br><br>=E2=80=A2 server--create-frame in lisp/serv=
er.el unconditionally calls (select-frame frame) on every newly created cli=
ent frame, with no coupling to which terminal actually has focus.<br>=E2=80=
=A2 do_switch_frame in src/frame.c sets the global selected_frame to this n=
ew frame, but for tty frames specifically it deliberately skips resetting i=
nternal_last_event_frame (guarded by if (!is_tty_frame (f)) around what is =
currently line 2090; comment references a prior fix for an unrelated switch=
-frame/post-command-hook infinite loop). selected_frame, internal_last_even=
t_frame, and current_kboard are all single, process-wide globals, not per-t=
erminal state.<br>=E2=80=A2 choose_minibuf_frame in src/minibuf.c (used by =
every minibuffer-reading command) picks the minibuffer window from whatever=
 selected_frame currently is, with no reference to which terminal&#39;s key=
stroke triggered the read.<br>=E2=80=A2 temporarily_switch_to_single_kboard=
, called from read_minibuf in src/minibuf.c, then locks the current keyboar=
d to that same (wrong) frame&#39;s terminal =E2=80=94 which is the direct c=
ause of the &quot;Frame is locked&quot; message on the original terminal.<b=
r><br>Hopefully someone familiar with these systems has an idea what and ap=
propriate fix might be.<br><br>Cheers,<br>Len<br><br><br><br><br>In GNU Ema=
cs 31.1.50 (build 1, x86_64-pc-linux-gnu, X toolkit, Xaw3d<br>=C2=A0scroll =
bars) of 2026-09-19 built on kaka<br>Repository revision: 911a9ac2f8cbb3832=
483ba3a25023dcf12c59653<br>Repository branch: emacs-31<br>System Descriptio=
n: Ubuntu 26.04.1 LTS<br><br>Configured using:<br>=C2=A0&#39;configure --pr=
efix=3D/home/len/.local --with-rsvg --with-cairo<br>=C2=A0--with-native-com=
pilation --with-xinput2 --with-tree-sitter<br>=C2=A0--with-modules&#39;<br>=
<br>Configured features:<br>ACL DBUS GIF GLIB GMP GNUTLS GPM GSETTINGS JPEG=
 LCMS2 LIBSYSTEMD LIBXML2<br>MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG=
 SECCOMP SOUND SQLITE3<br>THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP=
 X11 XAW3D XDBE XIM<br>XINPUT2 XPM LUCID ZLIB<br><br>Important settings:<br=
>=C2=A0 value of $LC_MONETARY: en_AU.UTF-8<br>=C2=A0 value of $LC_NUMERIC: =
en_AU.UTF-8<br>=C2=A0 value of $LC_TIME: en_AU.UTF-8<br>=C2=A0 value of $LA=
NG: en_US.UTF-8<br>=C2=A0 locale-coding-system: utf-8-unix<br><br>Major mod=
e: OpenCode<br><br>Minor modes in effect:<br>=C2=A0 global-jinx-mode: t<br>=
=C2=A0 display-time-mode: t<br>=C2=A0 global-clipetty-mode: t<br>=C2=A0 cli=
petty-mode: t<br>=C2=A0 global-atomic-chrome-edit-mode: t<br>=C2=A0 org-msg=
-mode: t<br>=C2=A0 agent-shell-attention-mode: t<br>=C2=A0 agent-shell-ui-m=
ode: t<br>=C2=A0 cursor-sensor-mode: t<br>=C2=A0 agent-shell-completion-mod=
e: t<br>=C2=A0 agent-shell-chat-mode: t<br>=C2=A0 global-completion-preview=
-mode: t<br>=C2=A0 completion-preview-mode: t<br>=C2=A0 global-treesit-auto=
-mode: t<br>=C2=A0 transient-posframe-mode: t<br>=C2=A0 fancy-compilation-m=
ode: t<br>=C2=A0 kitty-graphics-mode: t<br>=C2=A0 projectile-mode: t<br>=C2=
=A0 corfu-popupinfo-mode: t<br>=C2=A0 corfu-prescient-mode: t<br>=C2=A0 glo=
bal-corfu-mode: t<br>=C2=A0 corfu-mode: t<br>=C2=A0 smartparens-global-mode=
: t<br>=C2=A0 smartparens-mode: t<br>=C2=A0 editorconfig-mode: t<br>=C2=A0 =
term-keys-mode: t<br>=C2=A0 diredfl-global-mode: t<br>=C2=A0 global-mise-mo=
de: t<br>=C2=A0 mise-mode: t<br>=C2=A0 global-flycheck-eglot-mode: t<br>=C2=
=A0 nerd-icons-completion-mode: t<br>=C2=A0 marginalia-mode: t<br>=C2=A0 ve=
rtico-prescient-mode: t<br>=C2=A0 vertico-posframe-mode: t<br>=C2=A0 vertic=
o-multiform-mode: t<br>=C2=A0 vertico-mode: t<br>=C2=A0 treemacs-filewatch-=
mode: t<br>=C2=A0 treemacs-follow-mode: t<br>=C2=A0 treemacs-git-mode: t<br=
>=C2=A0 treemacs-fringe-indicator-mode: t<br>=C2=A0 nerd-icons-xref-mode: t=
<br>=C2=A0 global-ligature-mode: t<br>=C2=A0 ligature-mode: t<br>=C2=A0 dif=
f-hl-margin-mode: t<br>=C2=A0 global-diff-hl-mode: t<br>=C2=A0 modus-themes=
-include-derivatives-mode: t<br>=C2=A0 gcmh-mode: t<br>=C2=A0 ultra-scroll-=
mode: t<br>=C2=A0 pixel-scroll-precision-mode: t<br>=C2=A0 global-auto-reve=
rt-mode: t<br>=C2=A0 savehist-mode: t<br>=C2=A0 xterm-mouse-mode: t<br>=C2=
=A0 repeat-mode: t<br>=C2=A0 elpaca-use-package-mode: t<br>=C2=A0 override-=
global-mode: t<br>=C2=A0 tooltip-mode: t<br>=C2=A0 global-eldoc-mode: t<br>=
=C2=A0 show-paren-mode: t<br>=C2=A0 electric-indent-mode: t<br>=C2=A0 mouse=
-wheel-mode: t<br>=C2=A0 file-name-shadow-mode: t<br>=C2=A0 global-font-loc=
k-mode: t<br>=C2=A0 font-lock-mode: t<br>=C2=A0 minibuffer-nonselected-mode=
: t<br>=C2=A0 minibuffer-regexp-mode: t<br>=C2=A0 column-number-mode: t<br>=
=C2=A0 line-number-mode: t<br>=C2=A0 visual-line-mode: t<br>=C2=A0 transien=
t-mark-mode: t<br>=C2=A0 auto-composition-mode: t<br>=C2=A0 auto-encryption=
-mode: t<br>=C2=A0 auto-compression-mode: t<br><br>Load-path shadows:<br>/h=
ome/len/.emacs.d/elpaca/builds/corfu/corfu-quick hides /home/len/.emacs.d/e=
lpaca/repos/corfu/extensions/corfu-quick<br>/home/len/.emacs.d/elpaca/build=
s/corfu/corfu-popupinfo hides /home/len/.emacs.d/elpaca/repos/corfu/extensi=
ons/corfu-popupinfo<br>/home/len/.emacs.d/elpaca/builds/corfu/corfu-history=
 hides /home/len/.emacs.d/elpaca/repos/corfu/extensions/corfu-history<br>/h=
ome/len/.emacs.d/elpaca/builds/corfu/corfu-indexed hides /home/len/.emacs.d=
/elpaca/repos/corfu/extensions/corfu-indexed<br>/home/len/.emacs.d/elpaca/b=
uilds/corfu/corfu-auto hides /home/len/.emacs.d/elpaca/repos/corfu/extensio=
ns/corfu-auto<br>/home/len/.emacs.d/elpaca/builds/corfu/corfu-info hides /h=
ome/len/.emacs.d/elpaca/repos/corfu/extensions/corfu-info<br>/home/len/.ema=
cs.d/elpaca/builds/corfu/corfu-mouse hides /home/len/.emacs.d/elpaca/repos/=
corfu/extensions/corfu-mouse<br>/home/len/.emacs.d/elpaca/builds/corfu/corf=
u-echo hides /home/len/.emacs.d/elpaca/repos/corfu/extensions/corfu-echo<br=
>/home/len/.emacs.d/elpaca/builds/vertico/vertico-reverse hides /home/len/.=
emacs.d/elpaca/repos/vertico/extensions/vertico-reverse<br>/home/len/.emacs=
.d/elpaca/builds/vertico/vertico-flat hides /home/len/.emacs.d/elpaca/repos=
/vertico/extensions/vertico-flat<br>/home/len/.emacs.d/elpaca/builds/vertic=
o/vertico-grid hides /home/len/.emacs.d/elpaca/repos/vertico/extensions/ver=
tico-grid<br>/home/len/.emacs.d/elpaca/builds/vertico/vertico-suspend hides=
 /home/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-suspend<br>/hom=
e/len/.emacs.d/elpaca/builds/vertico/vertico-directory hides /home/len/.ema=
cs.d/elpaca/repos/vertico/extensions/vertico-directory<br>/home/len/.emacs.=
d/elpaca/builds/vertico/vertico-repeat hides /home/len/.emacs.d/elpaca/repo=
s/vertico/extensions/vertico-repeat<br>/home/len/.emacs.d/elpaca/builds/ver=
tico/vertico-multiform hides /home/len/.emacs.d/elpaca/repos/vertico/extens=
ions/vertico-multiform<br>/home/len/.emacs.d/elpaca/builds/vertico/vertico-=
buffer hides /home/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-buf=
fer<br>/home/len/.emacs.d/elpaca/builds/vertico/vertico-indexed hides /home=
/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-indexed<br>/home/len/=
.emacs.d/elpaca/builds/vertico/vertico-sort hides /home/len/.emacs.d/elpaca=
/repos/vertico/extensions/vertico-sort<br>/home/len/.emacs.d/elpaca/builds/=
vertico/vertico-unobtrusive hides /home/len/.emacs.d/elpaca/repos/vertico/e=
xtensions/vertico-unobtrusive<br>/home/len/.emacs.d/elpaca/builds/vertico/v=
ertico-mouse hides /home/len/.emacs.d/elpaca/repos/vertico/extensions/verti=
co-mouse<br>/home/len/.emacs.d/elpaca/builds/vertico/vertico-quick hides /h=
ome/len/.emacs.d/elpaca/repos/vertico/extensions/vertico-quick<br>/home/len=
/.emacs.d/elpaca/builds/editorconfig/editorconfig-core-handle hides /home/l=
en/.local/share/emacs/31.1.50/lisp/editorconfig-core-handle<br>/home/len/.e=
macs.d/elpaca/builds/transient/transient hides /home/len/.local/share/emacs=
/31.1.50/lisp/transient<br>/home/len/.emacs.d/elpaca/builds/editorconfig/ed=
itorconfig-conf-mode hides /home/len/.local/share/emacs/31.1.50/lisp/editor=
config-conf-mode<br>/home/len/.emacs.d/elpaca/builds/ef-themes/theme-loadde=
fs hides /home/len/.local/share/emacs/31.1.50/lisp/theme-loaddefs<br>/home/=
len/.emacs.d/elpaca/builds/editorconfig/editorconfig-tools hides /home/len/=
.local/share/emacs/31.1.50/lisp/editorconfig-tools<br>/home/len/.emacs.d/el=
paca/builds/editorconfig/editorconfig hides /home/len/.local/share/emacs/31=
.1.50/lisp/editorconfig<br>/home/len/.emacs.d/elpaca/builds/editorconfig/ed=
itorconfig-core hides /home/len/.local/share/emacs/31.1.50/lisp/editorconfi=
g-core<br>/home/len/.emacs.d/elpaca/builds/editorconfig/editorconfig-fnmatc=
h hides /home/len/.local/share/emacs/31.1.50/lisp/editorconfig-fnmatch<br>/=
home/len/.emacs.d/elpaca/builds/lua-mode/lua-mode hides /home/len/.local/sh=
are/emacs/31.1.50/lisp/progmodes/lua-mode<br>/home/len/.emacs.d/elpaca/buil=
ds/org/org-persist hides /home/len/.local/share/emacs/31.1.50/lisp/org/org-=
persist<br>/home/len/.emacs.d/elpaca/builds/org/ob-python hides /home/len/.=
local/share/emacs/31.1.50/lisp/org/ob-python<br>/home/len/.emacs.d/elpaca/b=
uilds/org/org-lint hides /home/len/.local/share/emacs/31.1.50/lisp/org/org-=
lint<br>/home/len/.emacs.d/elpaca/builds/org/ob-exp hides /home/len/.local/=
share/emacs/31.1.50/lisp/org/ob-exp<br>/home/len/.emacs.d/elpaca/builds/org=
/org-loaddefs hides /home/len/.local/share/emacs/31.1.50/lisp/org/org-loadd=
efs<br>/home/len/.emacs.d/elpaca/builds/org/org-cycle hides /home/len/.loca=
l/share/emacs/31.1.50/lisp/org/org-cycle<br>/home/len/.emacs.d/elpaca/build=
s/org/ob-latex hides /home/len/.local/share/emacs/31.1.50/lisp/org/ob-latex=
<br>/home/len/.emacs.d/elpaca/builds/org/org-clock hides /home/len/.local/s=
hare/emacs/31.1.50/lisp/org/org-clock<br>/home/len/.emacs.d/elpaca/builds/o=
rg/ol-bbdb hides /home/len/.local/share/emacs/31.1.50/lisp/org/ol-bbdb<br>/=
home/len/.emacs.d/elpaca/builds/org/org-fold-core hides /home/len/.local/sh=
are/emacs/31.1.50/lisp/org/org-fold-core<br>/home/len/.emacs.d/elpaca/build=
s/org/ob-processing hides /home/len/.local/share/emacs/31.1.50/lisp/org/ob-=
processing<br>/home/len/.emacs.d/elpaca/builds/org/ob-tangle hides /home/le=
n/.local/share/emacs/31.1.50/lisp/org/ob-tangle<br>/home/len/.emacs.d/elpac=
a/builds/org/org-element hides /home/len/.local/share/emacs/31.1.50/lisp/or=
g/org-element<br>/home/len/.emacs.d/elpaca/builds/org/ox-icalendar hides /h=
ome/len/.local/share/emacs/31.1.50/lisp/org/ox-icalendar<br>/home/len/.emac=
s.d/elpaca/builds/org/ol-eww hides /home/len/.local/share/emacs/31.1.50/lis=
p/org/ol-eww<br>/home/len/.emacs.d/elpaca/builds/org/org-tempo hides /home/=
len/.local/share/emacs/31.1.50/lisp/org/org-tempo<br>/home/len/.emacs.d/elp=
aca/builds/org/ob-dot hides /home/len/.local/share/emacs/31.1.50/lisp/org/o=
b-dot<br>/home/len/.emacs.d/elpaca/builds/org/ob-emacs-lisp hides /home/len=
/.local/share/emacs/31.1.50/lisp/org/ob-emacs-lisp<br>/home/len/.emacs.d/el=
paca/builds/org/ob-perl hides /home/len/.local/share/emacs/31.1.50/lisp/org=
/ob-perl<br>/home/len/.emacs.d/elpaca/builds/org/ob-gnuplot hides /home/len=
/.local/share/emacs/31.1.50/lisp/org/ob-gnuplot<br>/home/len/.emacs.d/elpac=
a/builds/org/org-footnote hides /home/len/.local/share/emacs/31.1.50/lisp/o=
rg/org-footnote<br>/home/len/.emacs.d/elpaca/builds/org/org-faces hides /ho=
me/len/.local/share/emacs/31.1.50/lisp/org/org-faces<br>/home/len/.emacs.d/=
elpaca/builds/org/org-agenda hides /home/len/.local/share/emacs/31.1.50/lis=
p/org/org-agenda<br>/home/len/.emacs.d/elpaca/builds/org/ox-html hides /hom=
e/len/.local/share/emacs/31.1.50/lisp/org/ox-html<br>/home/len/.emacs.d/elp=
aca/builds/org/ob-lilypond hides /home/len/.local/share/emacs/31.1.50/lisp/=
org/ob-lilypond<br>/home/len/.emacs.d/elpaca/builds/org/ob-calc hides /home=
/len/.local/share/emacs/31.1.50/lisp/org/ob-calc<br>/home/len/.emacs.d/elpa=
ca/builds/org/ob-clojure hides /home/len/.local/share/emacs/31.1.50/lisp/or=
g/ob-clojure<br>/home/len/.emacs.d/elpaca/builds/org/ol-mhe hides /home/len=
/.local/share/emacs/31.1.50/lisp/org/ol-mhe<br>/home/len/.emacs.d/elpaca/bu=
ilds/org/oc-biblatex hides /home/len/.local/share/emacs/31.1.50/lisp/org/oc=
-biblatex<br>/home/len/.emacs.d/elpaca/builds/org/ob-awk hides /home/len/.l=
ocal/share/emacs/31.1.50/lisp/org/ob-awk<br>/home/len/.emacs.d/elpaca/build=
s/org/org-archive hides /home/len/.local/share/emacs/31.1.50/lisp/org/org-a=
rchive<br>/home/len/.emacs.d/elpaca/builds/org/ol-w3m hides /home/len/.loca=
l/share/emacs/31.1.50/lisp/org/ol-w3m<br>/home/len/.emacs.d/elpaca/builds/o=
rg/org-habit hides /home/len/.local/share/emacs/31.1.50/lisp/org/org-habit<=
br>/home/len/.emacs.d/elpaca/builds/org/org-macs hides /home/len/.local/sha=
re/emacs/31.1.50/lisp/org/org-macs<br>/home/len/.emacs.d/elpaca/builds/org/=
org-refile hides /home/len/.local/share/emacs/31.1.50/lisp/org/org-refile<b=
r>/home/len/.emacs.d/elpaca/builds/org/ob-scheme hides /home/len/.local/sha=
re/emacs/31.1.50/lisp/org/ob-scheme<br>/home/len/.emacs.d/elpaca/builds/org=
/ob-sql hides /home/len/.local/share/emacs/31.1.50/lisp/org/ob-sql<br>/home=
/len/.emacs.d/elpaca/builds/org/ox hides /home/len/.local/share/emacs/31.1.=
50/lisp/org/ox<br>/home/len/.emacs.d/elpaca/builds/org/org-entities hides /=
home/len/.local/share/emacs/31.1.50/lisp/org/org-entities<br>/home/len/.ema=
cs.d/elpaca/builds/org/ol-man hides /home/len/.local/share/emacs/31.1.50/li=
sp/org/ol-man<br>/home/len/.emacs.d/elpaca/builds/org/ob-eval hides /home/l=
en/.local/share/emacs/31.1.50/lisp/org/ob-eval<br>/home/len/.emacs.d/elpaca=
/builds/org/ob-lua hides /home/len/.local/share/emacs/31.1.50/lisp/org/ob-l=
ua<br>/home/len/.emacs.d/elpaca/builds/org/ox-publish hides /home/len/.loca=
l/share/emacs/31.1.50/lisp/org/ox-publish<br>/home/len/.emacs.d/elpaca/buil=
ds/org/ox-koma-letter hides /home/len/.local/share/emacs/31.1.50/lisp/org/o=
x-koma-letter<br>/home/len/.emacs.d/elpaca/builds/org/org-num hides /home/l=
en/.local/share/emacs/31.1.50/lisp/org/org-num<br>/home/len/.emacs.d/elpaca=
/builds/org/org-attach-git hides /home/len/.local/share/emacs/31.1.50/lisp/=
org/org-attach-git<br>/home/len/.emacs.d/elpaca/builds/org/org-src hides /h=
ome/len/.local/share/emacs/31.1.50/lisp/org/org-src<br>/home/len/.emacs.d/e=
lpaca/builds/org/ob-forth hides /home/len/.local/share/emacs/31.1.50/lisp/o=
rg/ob-forth<br>/home/len/.emacs.d/elpaca/builds/org/ob-csharp hides /home/l=
en/.local/share/emacs/31.1.50/lisp/org/ob-csharp<br>/home/len/.emacs.d/elpa=
ca/builds/org/ol-eshell hides /home/len/.local/share/emacs/31.1.50/lisp/org=
/ol-eshell<br>/home/len/.emacs.d/elpaca/builds/org/ox-org hides /home/len/.=
local/share/emacs/31.1.50/lisp/org/ox-org<br>/home/len/.emacs.d/elpaca/buil=
ds/org/ob-lisp hides /home/len/.local/share/emacs/31.1.50/lisp/org/ob-lisp<=
br>/home/len/.emacs.d/elpaca/builds/org/org-attach hides /home/len/.local/s=
hare/emacs/31.1.50/lisp/org/org-attach<br>/home/len/.emacs.d/elpaca/builds/=
org/ob-screen hides /home/len/.local/share/emacs/31.1.50/lisp/org/ob-screen=
<br>/home/len/.emacs.d/elpaca/builds/org/org-inlinetask hides /home/len/.lo=
cal/share/emacs/31.1.50/lisp/org/org-inlinetask<br>/home/len/.emacs.d/elpac=
a/builds/org/ob-R hides /home/len/.local/share/emacs/31.1.50/lisp/org/ob-R<=
br>/home/len/.emacs.d/elpaca/builds/org/ol-docview hides /home/len/.local/s=
hare/emacs/31.1.50/lisp/org/ol-docview<br>/home/len/.emacs.d/elpaca/builds/=
org/org-pcomplete hides /home/len/.local/share/emacs/31.1.50/lisp/org/org-p=
complete<br>/home/len/.emacs.d/elpaca/builds/org/ob-makefile hides /home/le=
n/.local/share/emacs/31.1.50/lisp/org/ob-makefile<br>/home/len/.emacs.d/elp=
aca/builds/org/ox-beamer hides /home/len/.local/share/emacs/31.1.50/lisp/or=
g/ox-beamer<br>/home/len/.emacs.d/elpaca/builds/org/org-fold hides /home/le=
n/.local/share/emacs/31.1.50/lisp/org/org-fold<br>/home/len/.emacs.d/elpaca=
/builds/org/ob-C hides /home/len/.local/share/emacs/31.1.50/lisp/org/ob-C<b=
r>/home/len/.emacs.d/elpaca/builds/org/org-colview hides /home/len/.local/s=
hare/emacs/31.1.50/lisp/org/org-colview<br>/home/len/.emacs.d/elpaca/builds=
/org/oc-natbib hides /home/len/.local/share/emacs/31.1.50/lisp/org/oc-natbi=
b<br>/home/len/.emacs.d/elpaca/builds/org/org-plot hides /home/len/.local/s=
hare/emacs/31.1.50/lisp/org/org-plot<br>/home/len/.emacs.d/elpaca/builds/or=
g/ob-ditaa hides /home/len/.local/share/emacs/31.1.50/lisp/org/ob-ditaa<br>=
/home/len/.emacs.d/elpaca/builds/org/oc-bibtex hides /home/len/.local/share=
/emacs/31.1.50/lisp/org/oc-bibtex<br>/home/len/.emacs.d/elpaca/builds/org/o=
b-julia hides /home/len/.local/share/emacs/31.1.50/lisp/org/ob-julia<br>/ho=
me/len/.emacs.d/elpaca/builds/org/org-feed hides /home/len/.local/share/ema=
cs/31.1.50/lisp/org/org-feed<br>/home/len/.emacs.d/elpaca/builds/org/org hi=
des /home/len/.local/share/emacs/31.1.50/lisp/org/org<br>/home/len/.emacs.d=
/elpaca/builds/org/ob-haskell hides /home/len/.local/share/emacs/31.1.50/li=
sp/org/ob-haskell<br>/home/len/.emacs.d/elpaca/builds/org/oc-basic hides /h=
ome/len/.local/share/emacs/31.1.50/lisp/org/oc-basic<br>/home/len/.emacs.d/=
elpaca/builds/org/ob-octave hides /home/len/.local/share/emacs/31.1.50/lisp=
/org/ob-octave<br>/home/len/.emacs.d/elpaca/builds/org/ob-java hides /home/=
len/.local/share/emacs/31.1.50/lisp/org/ob-java<br>/home/len/.emacs.d/elpac=
a/builds/org/org-ctags hides /home/len/.local/share/emacs/31.1.50/lisp/org/=
org-ctags<br>/home/len/.emacs.d/elpaca/builds/org/org-protocol hides /home/=
len/.local/share/emacs/31.1.50/lisp/org/org-protocol<br>/home/len/.emacs.d/=
elpaca/builds/org/org-list hides /home/len/.local/share/emacs/31.1.50/lisp/=
org/org-list<br>/home/len/.emacs.d/elpaca/builds/org/ob-groovy hides /home/=
len/.local/share/emacs/31.1.50/lisp/org/ob-groovy<br>/home/len/.emacs.d/elp=
aca/builds/org/ob-fortran hides /home/len/.local/share/emacs/31.1.50/lisp/o=
rg/ob-fortran<br>/home/len/.emacs.d/elpaca/builds/org/org-datetree hides /h=
ome/len/.local/share/emacs/31.1.50/lisp/org/org-datetree<br>/home/len/.emac=
s.d/elpaca/builds/org/ox-ascii hides /home/len/.local/share/emacs/31.1.50/l=
isp/org/ox-ascii<br>/home/len/.emacs.d/elpaca/builds/org/ol-gnus hides /hom=
e/len/.local/share/emacs/31.1.50/lisp/org/ol-gnus<br>/home/len/.emacs.d/elp=
aca/builds/org/ob-ruby hides /home/len/.local/share/emacs/31.1.50/lisp/org/=
ob-ruby<br>/home/len/.emacs.d/elpaca/builds/org/ol-rmail hides /home/len/.l=
ocal/share/emacs/31.1.50/lisp/org/ol-rmail<br>/home/len/.emacs.d/elpaca/bui=
lds/org/ob-lob hides /home/len/.local/share/emacs/31.1.50/lisp/org/ob-lob<b=
r>/home/len/.emacs.d/elpaca/builds/org/ob-js hides /home/len/.local/share/e=
macs/31.1.50/lisp/org/ob-js<br>/home/len/.emacs.d/elpaca/builds/org/ol-irc =
hides /home/len/.local/share/emacs/31.1.50/lisp/org/ol-irc<br>/home/len/.em=
acs.d/elpaca/builds/org/ob hides /home/len/.local/share/emacs/31.1.50/lisp/=
org/ob<br>/home/len/.emacs.d/elpaca/builds/org/ob-maxima hides /home/len/.l=
ocal/share/emacs/31.1.50/lisp/org/ob-maxima<br>/home/len/.emacs.d/elpaca/bu=
ilds/org/oc hides /home/len/.local/share/emacs/31.1.50/lisp/org/oc<br>/home=
/len/.emacs.d/elpaca/builds/org/org-timer hides /home/len/.local/share/emac=
s/31.1.50/lisp/org/org-timer<br>/home/len/.emacs.d/elpaca/builds/org/ol-inf=
o hides /home/len/.local/share/emacs/31.1.50/lisp/org/ol-info<br>/home/len/=
.emacs.d/elpaca/builds/org/ox-odt hides /home/len/.local/share/emacs/31.1.5=
0/lisp/org/ox-odt<br>/home/len/.emacs.d/elpaca/builds/org/ol-doi hides /hom=
e/len/.local/share/emacs/31.1.50/lisp/org/ol-doi<br>/home/len/.emacs.d/elpa=
ca/builds/org/org-id hides /home/len/.local/share/emacs/31.1.50/lisp/org/or=
g-id<br>/home/len/.emacs.d/elpaca/builds/org/ob-core hides /home/len/.local=
/share/emacs/31.1.50/lisp/org/ob-core<br>/home/len/.emacs.d/elpaca/builds/o=
rg/ox-md hides /home/len/.local/share/emacs/31.1.50/lisp/org/ox-md<br>/home=
/len/.emacs.d/elpaca/builds/org/org-indent hides /home/len/.local/share/ema=
cs/31.1.50/lisp/org/org-indent<br>/home/len/.emacs.d/elpaca/builds/org/ob-e=
shell hides /home/len/.local/share/emacs/31.1.50/lisp/org/ob-eshell<br>/hom=
e/len/.emacs.d/elpaca/builds/org/ol-bibtex hides /home/len/.local/share/ema=
cs/31.1.50/lisp/org/ol-bibtex<br>/home/len/.emacs.d/elpaca/builds/org/ob-ma=
tlab hides /home/len/.local/share/emacs/31.1.50/lisp/org/ob-matlab<br>/home=
/len/.emacs.d/elpaca/builds/org/ob-sqlite hides /home/len/.local/share/emac=
s/31.1.50/lisp/org/ob-sqlite<br>/home/len/.emacs.d/elpaca/builds/org/org-go=
to hides /home/len/.local/share/emacs/31.1.50/lisp/org/org-goto<br>/home/le=
n/.emacs.d/elpaca/builds/org/org-table hides /home/len/.local/share/emacs/3=
1.1.50/lisp/org/org-table<br>/home/len/.emacs.d/elpaca/builds/org/ob-org hi=
des /home/len/.local/share/emacs/31.1.50/lisp/org/ob-org<br>/home/len/.emac=
s.d/elpaca/builds/org/ob-css hides /home/len/.local/share/emacs/31.1.50/lis=
p/org/ob-css<br>/home/len/.emacs.d/elpaca/builds/org/org-capture hides /hom=
e/len/.local/share/emacs/31.1.50/lisp/org/org-capture<br>/home/len/.emacs.d=
/elpaca/builds/org/org-element-ast hides /home/len/.local/share/emacs/31.1.=
50/lisp/org/org-element-ast<br>/home/len/.emacs.d/elpaca/builds/org/ob-tabl=
e hides /home/len/.local/share/emacs/31.1.50/lisp/org/ob-table<br>/home/len=
/.emacs.d/elpaca/builds/org/org-macro hides /home/len/.local/share/emacs/31=
.1.50/lisp/org/org-macro<br>/home/len/.emacs.d/elpaca/builds/org/org-crypt =
hides /home/len/.local/share/emacs/31.1.50/lisp/org/org-crypt<br>/home/len/=
.emacs.d/elpaca/builds/org/ob-ref hides /home/len/.local/share/emacs/31.1.5=
0/lisp/org/ob-ref<br>/home/len/.emacs.d/elpaca/builds/org/oc-csl hides /hom=
e/len/.local/share/emacs/31.1.50/lisp/org/oc-csl<br>/home/len/.emacs.d/elpa=
ca/builds/org/ob-sass hides /home/len/.local/share/emacs/31.1.50/lisp/org/o=
b-sass<br>/home/len/.emacs.d/elpaca/builds/org/ol hides /home/len/.local/sh=
are/emacs/31.1.50/lisp/org/ol<br>/home/len/.emacs.d/elpaca/builds/org/ob-sh=
ell hides /home/len/.local/share/emacs/31.1.50/lisp/org/ob-shell<br>/home/l=
en/.emacs.d/elpaca/builds/org/ob-plantuml hides /home/len/.local/share/emac=
s/31.1.50/lisp/org/ob-plantuml<br>/home/len/.emacs.d/elpaca/builds/org/org-=
duration hides /home/len/.local/share/emacs/31.1.50/lisp/org/org-duration<b=
r>/home/len/.emacs.d/elpaca/builds/org/ox-latex hides /home/len/.local/shar=
e/emacs/31.1.50/lisp/org/ox-latex<br>/home/len/.emacs.d/elpaca/builds/org/o=
rg-mobile hides /home/len/.local/share/emacs/31.1.50/lisp/org/org-mobile<br=
>/home/len/.emacs.d/elpaca/builds/org/org-mouse hides /home/len/.local/shar=
e/emacs/31.1.50/lisp/org/org-mouse<br>/home/len/.emacs.d/elpaca/builds/org/=
org-version hides /home/len/.local/share/emacs/31.1.50/lisp/org/org-version=
<br>/home/len/.emacs.d/elpaca/builds/org/org-keys hides /home/len/.local/sh=
are/emacs/31.1.50/lisp/org/org-keys<br>/home/len/.emacs.d/elpaca/builds/org=
/ob-comint hides /home/len/.local/share/emacs/31.1.50/lisp/org/ob-comint<br=
>/home/len/.emacs.d/elpaca/builds/org/ob-sed hides /home/len/.local/share/e=
macs/31.1.50/lisp/org/ob-sed<br>/home/len/.emacs.d/elpaca/builds/org/org-co=
mpat hides /home/len/.local/share/emacs/31.1.50/lisp/org/org-compat<br>/hom=
e/len/.emacs.d/elpaca/builds/org/ob-ocaml hides /home/len/.local/share/emac=
s/31.1.50/lisp/org/ob-ocaml<br>/home/len/.emacs.d/elpaca/builds/org/ox-texi=
nfo hides /home/len/.local/share/emacs/31.1.50/lisp/org/ox-texinfo<br>/home=
/len/.emacs.d/elpaca/builds/org/ox-man hides /home/len/.local/share/emacs/3=
1.1.50/lisp/org/ox-man<br>/home/len/.emacs.d/elpaca/builds/compat/compat hi=
des /home/len/.local/share/emacs/31.1.50/lisp/emacs-lisp/compat<br>/home/le=
n/.emacs.d/elpaca/builds/eldoc/eldoc hides /home/len/.local/share/emacs/31.=
1.50/lisp/emacs-lisp/eldoc<br><br>Features:<br>(shadow sort mail-extr emacs=
bug vc-git markdown-ts-appear toml-ts-mode<br>yaml-ts-mode html-ts-mode mar=
kdown-ts-mode-x markdown-ts-mode<br>system-sleep tramp-archive tramp-gvfs z=
eroconf jinx term/xterm xterm<br>avoid time clipetty atomic-chrome python-p=
ytest python-x folding-isearch<br>folding py-isort python-black reformatter=
 blacken conda em-dirs esh-mode<br>esh-var eshell esh-cmd esh-ext esh-proc =
esh-opt esh-io esh-arg<br>esh-module esh-module-loaddefs esh-util pythonic =
pet yaml f groovy-mode<br>kotlin-mode kotlin-mode-indent kotlin-mode-lexer =
dna-mode<br>consult-notmuch notmuch notmuch-tree notmuch-jump notmuch-hello=
<br>notmuch-show notmuch-print notmuch-crypto notmuch-mua notmuch-message<b=
r>notmuch-draft notmuch-maildir-fcc notmuch-address notmuch-company<br>notm=
uch-parser notmuch-wash coolj goto-addr notmuch-tag crm notmuch-lib<br>notm=
uch-compat org-msg htmlize gnus-msg gnus-icalendar icalendar-utils<br>icale=
ndar-parser icalendar-ast icalendar diary-lib diary-loaddefs<br>gnus-dired =
gnus-cite gnus-art mm-uu mml2015 mm-view mml-smime smime dig<br>gnus-sum gn=
us-group gnus-undo gnus-start gnus-cloud nnimap nnmail<br>mail-source utf7 =
nnoo gnus-spec gnus-int gnus-range message sendmail<br>yank-media rfc822 mm=
l mml-sec epa epg rfc6068 epg-config mm-decode<br>mm-bodies mm-encode maila=
bbrev gmm-utils gnus-win ement<br>ement-notifications ement-notify notifica=
tions ement-room ement-lib<br>ement-api ement-structs ement-macros magit-se=
ction plz dns time-zones<br>monet agent-shell-attention agent-shell agent-s=
hell-xai<br>agent-shell-viewport agent-shell-list-edit agent-shell-ui curso=
r-sensor<br>agent-shell-worktree agent-shell-usage agent-shell-styles<br>ag=
ent-shell-qwen agent-shell-pi agent-shell-opencode agent-shell-openai<br>ag=
ent-shell-omp agent-shell-mistral agent-shell-kiro agent-shell-kimi<br>agen=
t-shell-hermes agent-shell-active-message agent-shell-heartbeat<br>agent-sh=
ell-goose agent-shell-google agent-shell-github<br>agent-shell-droid agent-=
shell-experimental agent-shell-dnd<br>agent-shell-prompt-queue agent-shell-=
prompt agent-shell-diff<br>agent-shell-devcontainer agent-shell-cursor agen=
t-shell-config<br>agent-shell-completion agent-shell-project agent-shell-cl=
ine<br>agent-shell-codebuddy agent-shell-chat-mode agent-shell-auggie<br>ag=
ent-shell-anthropic agent-shell-antigravity agent-shell-markdown<br>agent-s=
hell-faces agent-shell-artist artist picture reporter<br>agent-shell-work-b=
uffer acp acp-traffic shell-maker pcsv remoto<br>ghub-graphql treepy gsexp =
ghub let-alist gnutls emacs-everywhere<br>spookfox-tabs spookfox ox-pandoc =
ox-org ox-odt rng-loc rng-uri rng-parse<br>rng-match rng-dt rng-util rng-pt=
trn nxml-parse nxml-ns nxml-enc xmltok<br>nxml-util ox-latex ox-icalendar o=
x-html table ox-ascii ox-publish ox<br>org-attach org-projectile org-projec=
t-capture<br>org-project-capture-backend org-category-capture org-capture o=
rg-agenda<br>org-element org-persist org-id avl-tree org-refile ob-sql ob-d=
ot<br>ob-plantuml ob-gnuplot ob-js ob-python ob-awk ob-shell smartparens-or=
g<br>completion-preview org ob ob-tangle ob-ref ob-lob ob-table ob-exp<br>o=
rg-macro org-src ob-comint org-element-ast org-pcomplete org-list<br>org-fo=
otnote org-faces org-entities ob-emacs-lisp ob-core ob-eval<br>org-cycle ol=
 org-fold cal-menu calendar cal-loaddefs breadcrumb<br>flycheck-eglot eglot=
-java eglot tree-widget external-completion jsonrpc<br>diff ert debug backt=
race just-mode jupyter jupyter-server<br>jupyter-server-kernel jupyter-rest=
-api url-http url-auth mail-parse<br>rfc2231 rfc2047 rfc2045 ietf-drums url=
-gw nsm jupyter-repl<br>jupyter-widget-client websocket bindat jupyter-clie=
nt jupyter-kernel<br>jupyter-kernelspec jupyter-env jupyter-monads jupyter-=
messages hmac-def<br>jupyter-mime jupyter-base restclient svelte-mode<br>di=
splay-fill-column-indicator display-line-numbers<br>highlight-indent-guides=
 outli ws-butler symbol-overlay css-mode eww<br>vtable url-queue mm-url gnu=
s nnheader gnus-util range mm-util mail-prsvr<br>typescript-mode ejc-sql ej=
c-completion-common ejc-doc ejc-interaction<br>clomacs simple-httpd smartpa=
rens-clojure cider cider-doctor cider-debug<br>cider-browse-ns cider-mode c=
ider-xref-backend cider-xref-source<br>cider-find cider-completion cider-en=
lighten cider-profile<br>cider-inspector cider-ns-state cider-eval cider-co=
nnection<br>cider-repl-history cider-history cider-repl cider-test cider-re=
solve<br>cider-compilation cider-stacktrace cider-overlays cider-doc<br>cid=
er-browse-spec cider-tree-view cider-clojuredocs cider-popup<br>cider-jack-=
in cider-inspiration cider-endpoint tramp-sh cider-eldoc<br>cider-docstring=
 shr pixel-fill kinsoku url-file puny cider-cljs<br>cider-client cider-comp=
letion-context cider-session cider-common<br>cider-util clojure-mode lisp-m=
nt align sesman-browser nrepl-client<br>nrepl-bencode nrepl-dict queue spin=
ner parseedn parseclj-parser<br>parseclj-lex parseclj-alist sesman net-util=
s ejc-eldoc ejc-format<br>ejc-result-buffer ejc-result-mode cua-base ejc-li=
b org-table<br>org-fold-core org-keys oc org-compat org-version org-macs sq=
l view<br>php-mode php-style php-indent php-face php php-project php-keywor=
ds<br>php-core flymake eldev eldev-util smartparens-go go-mode find-file ff=
ap<br>js2-mode etags smartparens-javascript js smartparens-rust rust-utils<=
br>rust-prog-mode rust-mode rust-playpen rust-cargo rust-common<br>rust-rus=
tfmt rust-compile smartparens-lua lua-mode snakemake-mode<br>smartparens-py=
thon python gnuplot info-look info scad-dbus dbus<br>scad-mode treesit-auto=
 quarto-mode mode-local poly-markdown<br>smartparens-markdown markdown-mode=
 polymode derived poly-lock<br>polymode-base polymode-weave polymode-export=
 polymode-compat<br>polymode-methods polymode-core polymode-classes eieio-c=
ustom eieio-base<br>plantuml-mode deflate graphviz-dot-mode graphviz-dot-fl=
ycheck<br>multi-web-mode dts-mode dockerfile-mode sh-script smie executable=
<br>transient-posframe transient llama devcontainer tramp-container<br>fanc=
y-compilation kitty-graphics ghostel ghostel-shell<br>ghostel-module-instal=
l ghostel-links ghostel-line-mode ghostel-kitty<br>ghostel-faces projectile=
 noutline outline fileloop generator ibuffer-vc<br>ibuf-ext ibuffer ibuffer=
-loaddefs apheleia apheleia-rcs apheleia-dp<br>apheleia-formatters apheleia=
-utils apheleia-log<br>apheleia-formatter-context yasnippet-capf cape kind-=
icon svg-lib svg xml<br>corfu-popupinfo corfu-prescient corfu py-snippets m=
ultiple-cursors<br>mc-separate-operations rectangular-region-mode mc-mark-p=
op mc-edit-lines<br>mc-hide-unmatched-lines-mode mc-mark-more smartparens-h=
tml sgml-mode<br>facemenu dom mc-cycle-cursors multiple-cursors-core sudo-e=
dit<br>tramp-cache time-stamp tramp trampver tramp-integration files-x<br>t=
ramp-message tramp-compat shell pcomplete parse-time iso8601 time-date<br>t=
ramp-loaddefs wgrep-ag wgrep grep rectangle-utils rect<br>smartparens-confi=
g smartparens-text smartparens-c smartparens thingatpt<br>dtrt-indent edito=
rconfig editorconfig-core editorconfig-core-handle<br>editorconfig-fnmatch =
term-keys vundo dirvish diredfl dired-hide-dotfiles<br>mise inheritenv dumb=
-jump consult-yasnippet yasnippet consult-flycheck<br>flycheck find-func af=
fe server consult treemacs-bookmarks treemacs-tags<br>imenu bookmark nerd-i=
cons-completion marginalia vertico-prescient<br>prescient char-fold vertico=
-posframe vertico-multiform vertico-directory<br>vertico-reverse vertico co=
unsel request mailheader mail-utils swiper ivy<br>ivy-faces colir disp-tabl=
e posframe point-stack move-text hydra lv<br>keycast format-spec cond-let c=
ompat treemacs-nerd-icons treemacs<br>treemacs-header-line treemacs-compati=
bility treemacs-mode<br>treemacs-interface treemacs-persistence eldoc treem=
acs-filewatch-mode<br>treemacs-follow-mode treemacs-rendering treemacs-anno=
tations<br>treemacs-async treemacs-workspaces treemacs-dom treemacs-visuals=
<br>treemacs-fringe-indicator treemacs-faces treemacs-icons treemacs-scope<=
br>treemacs-themes treemacs-core-utils pfuture inline hl-line ht<br>treemac=
s-logging treemacs-customization treemacs-macros nerd-icons-xref<br>xref pr=
oject ligature diff-hl-margin diff-hl-dired diff-hl log-view<br>log-edit ad=
d-log pcvs-util vc-dir ewoc diff-mode track-changes<br>rainbow-mode xterm-c=
olor spaceline-config spaceline-segments nerd-icons<br>nerd-icons-faces ner=
d-icons-data nerd-icons-data-mdicon<br>nerd-icons-data-flicon nerd-icons-da=
ta-codicon nerd-icons-data-devicon<br>nerd-icons-data-sucicon nerd-icons-da=
ta-wicon nerd-icons-data-faicon<br>nerd-icons-data-powerline nerd-icons-dat=
a-octicon<br>nerd-icons-data-pomicon nerd-icons-data-ipsicon s spaceline po=
werline<br>powerline-separators powerline-themes dash ef-elea-dark-theme ef=
-themes<br>modus-themes auto-minor-mode diminish try package browse-url<br>=
url-handlers package-activate gcmh ultra-scroll pixel-scroll<br>python-pyte=
st-autoloads python-x-autoloads folding-autoloads<br>sphinx-doc-autoloads p=
y-isort-autoloads python-black-autoloads<br>reformatter-autoloads blacken-a=
utoloads conda-autoloads<br>pythonic-autoloads pet-autoloads nextflow-mode-=
autoloads<br>groovy-mode-autoloads kotlin-mode-autoloads dna-mode-autoloads=
<br>consult-notmuch-autoloads notmuch-autoloads org-msg-autoloads<br>htmliz=
e-autoloads ement-autoloads taxy-magit-section-autoloads<br>taxy-autoloads =
persist-autoloads slack-autoloads alert-autoloads<br>log4e-autoloads gntp-a=
utoloads ts-autoloads emojify-autoloads<br>circe-autoloads eradio-autoloads=
 time-zones-autoloads<br>claude-code-autoloads monet-autoloads relysium-aut=
oloads gptel-autoloads<br>agent-shell-attention-autoloads agent-shell-sideb=
ar-autoloads<br>agent-shell-hq-autoloads persp-mode-autoloads agent-shell-a=
utoloads<br>acp-autoloads shell-maker-autoloads pcsv-autoloads remoto-autol=
oads<br>atomic-chrome-autoloads emacs-everywhere-autoloads spookfox-autoloa=
ds<br>counsel-keepassxc-autoloads lsp-ui-autoloads lsp-mode-autoloads<br>f-=
autoloads breadcrumb-autoloads sideline-flycheck-autoloads<br>sideline-auto=
loads flycheck-eglot-autoloads eglot-java-autoloads<br>just-mode-autoloads =
code-cells-autoloads jupyter-autoloads<br>websocket-autoloads zmq-autoloads=
 restclient-autoloads<br>svelte-mode-autoloads typescript-mode-autoloads ej=
c-sql-autoloads<br>clomacs-autoloads cider-autoloads spinner-autoloads<br>s=
imple-httpd-autoloads sesman-autoloads queue-autoloads<br>parseedn-autoload=
s parseclj-autoloads clojure-mode-autoloads<br>php-mode-autoloads eldev-aut=
oloads eldoc-autoloads go-mode-autoloads<br>js2-mode-autoloads rust-mode-au=
toloads lua-mode-autoloads<br>snakemake-mode-autoloads gnuplot-autoloads sc=
ad-dbus-autoloads<br>scad-mode-autoloads treesit-auto-autoloads quarto-mode=
-autoloads<br>poly-markdown-autoloads polymode-autoloads markdown-ts-appear=
-autoloads<br>plantuml-mode-autoloads deflate-autoloads graphviz-dot-mode-a=
utoloads<br>ox-pandoc-autoloads org-projectile-autoloads<br>org-project-cap=
ture-autoloads org-category-capture-autoloads<br>org-pretty-table-autoloads=
 org-bullets-autoloads<br>org-hide-drawers-autoloads org-appear-autoloads o=
rg-download-autoloads<br>async-autoloads org-loaddefs multi-web-mode-autolo=
ads<br>yaml-mode-autoloads terraform-mode-autoloads hcl-mode-autoloads<br>d=
ts-mode-autoloads csv-mode-autoloads dockerfile-mode-autoloads<br>git-timem=
achine-autoloads git-messenger-autoloads popup-autoloads<br>majutsu-autoloa=
ds plz-autoloads forge-autoloads yaml-autoloads<br>markdown-mode-autoloads =
ghub-autoloads treepy-autoloads closql-autoloads<br>emacsql-autoloads magit=
-blame-color-by-age-autoloads<br>treemacs-magit-autoloads magit-autoloads w=
ith-editor-autoloads<br>magit-section-autoloads transient-posframe-autoload=
s transient-autoloads<br>llama-autoloads conventional-commit-autoloads devc=
ontainer-autoloads<br>fancy-compilation-autoloads kitty-graphics-autoloads<=
br>xterm-color-autoloads eat-autoloads ghostel-autoloads<br>projectile-auto=
loads apheleia-autoloads jinx-autoloads<br>consult-flycheck-autoloads flych=
eck-autoloads yasnippet-capf-autoloads<br>cape-autoloads kind-icon-autoload=
s svg-lib-autoloads<br>corfu-terminal-autoloads popon-autoloads corfu-presc=
ient-autoloads<br>corfu-autoloads py-snippets-autoloads consult-yasnippet-a=
utoloads<br>yasnippet-autoloads multiple-cursors-autoloads iedit-autoloads<=
br>sudo-edit-autoloads visual-regexp-autoloads wgrep-ag-autoloads<br>wgrep-=
autoloads rectangle-utils-autoloads smartparens-autoloads<br>ws-butler-auto=
loads dtrt-indent-autoloads editorconfig-autoloads<br>expand-region-autoloa=
ds clipetty-autoloads term-keys-autoloads<br>vundo-autoloads dirvish-autolo=
ads dired-dragon-autoloads<br>dired-git-info-autoloads diredfl-autoloads di=
red-subtree-autoloads<br>dired-hacks-utils-autoloads dired-du-autoloads<br>=
dired-hide-dotfiles-autoloads mise-autoloads inheritenv-autoloads<br>ibuffe=
r-vc-autoloads dumb-jump-autoloads embark-consult-autoloads<br>embark-autol=
oads affe-autoloads consult-autoloads marginalia-autoloads<br>vertico-presc=
ient-autoloads prescient-autoloads<br>vertico-posframe-autoloads vertico-au=
toloads counsel-autoloads<br>request-autoloads swiper-autoloads ivy-autoloa=
ds<br>treemacs-nerd-icons-autoloads treemacs-autoloads ace-window-autoloads=
<br>avy-autoloads cfrs-autoloads posframe-autoloads point-stack-autoloads<b=
r>crux-autoloads move-text-autoloads hydra-autoloads lv-autoloads<br>outli-=
autoloads keycast-autoloads cond-let-autoloads ht-autoloads<br>pfuture-auto=
loads nerd-icons-ibuffer-autoloads nerd-icons-xref-autoloads<br>nerd-icons-=
dired-autoloads nerd-icons-completion-autoloads<br>compat-autoloads nerd-ic=
ons-autoloads ligature-autoloads<br>symbol-overlay-autoloads highlight-inde=
nt-guides-autoloads<br>diff-hl-autoloads rainbow-mode-autoloads spaceline-a=
utoloads s-autoloads<br>dash-autoloads powerline-autoloads ef-themes-autolo=
ads<br>modus-themes-autoloads auto-minor-mode-autoloads diminish-autoloads<=
br>try-autoloads mixed-pitch-autoloads transpose-frame-autoloads<br>gcmh-au=
toloads ultra-scroll-autoloads generic loadhist csharp-mode<br>c-ts-common =
cc-langs cc-mode cc-fonts cc-guess cc-menus cc-cmds<br>cc-styles cc-align c=
c-engine cc-vars cc-defs compile<br>text-property-search comint ansi-osc an=
si-color ring conf-mode treesit<br>cus-edit pp cus-start cus-load wid-edit =
vc vc-dispatcher dabbrev<br>image-dired image-dired-tags image-dired-extern=
al image-dired-util xdg<br>image-mode exif dired dired-loaddefs midnight au=
torevert filenotify<br>savehist ediff ediff-merg ediff-mult ediff-wind edif=
f-diff ediff-help<br>ediff-init ediff-util whitespace elpaca-menu-elpa advi=
ce pulse<br>face-remap color elpaca-menu-melpa url url-proxy url-privacy ur=
l-expand<br>url-methods url-history url-cookie generate-lisp-file url-domsu=
f<br>url-util url-parse auth-source eieio eieio-core password-cache json ma=
p<br>url-vars mailcap elpaca-menu-org xt-mouse repeat comp comp-cstr subr-x=
<br>mule-util comp-run comp-common rx edmacro kmacro pcase cl-extra<br>help=
-mode cl-macs elpaca-use-package use-package use-package-ensure<br>use-pack=
age-delight use-package-diminish use-package-bind-key bind-key<br>easy-mmod=
e use-package-core elpaca-use-package-autoloads cl-seq byte-opt<br>gv bytec=
omp byte-compile elpaca-git elpaca warnings icons elpaca-process<br>cl-load=
defs cl-lib elpaca-autoloads rmc iso-transl tooltip cconv paren<br>electric=
 uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel<br>term/x-w=
in x-win term/common-win x-dnd touch-screen tool-bar dnd fontset<br>image r=
egexp-opt fringe tabulated-list replace newcomment text-mode<br>lisp-mode p=
rog-mode register page tab-bar menu-bar rfn-eshadow isearch<br>easymenu tim=
er select scroll-bar mouse jit-lock font-lock syntax<br>font-core term/tty-=
colors frame minibuffer nadvice seq simple cl-generic<br>indonesian philipp=
ine cham georgian utf-8-lang misc-lang vietnamese<br>tibetan thai tai-viet =
lao korean japanese eucjp-ms cp51932 hebrew greek<br>romanian slovak czech =
european ethiopic indian cyrillic chinese<br>composite emoji-zwj charscript=
 charprop case-table epa-hook<br>jka-cmpr-hook help abbrev obarray oclosure=
 cl-preloaded button loaddefs<br>theme-loaddefs faces cus-face macroexp fil=
es window text-properties<br>overlay sha1 md5 base64 format env code-pages =
mule custom widget keymap<br>hashtable-print-readable backquote threads dbu=
sbind inotify lcms2<br>dynamic-setting x-toolkit xinput2 x multi-tty move-t=
oolbar<br>make-network-process tty-child-frames native-compile emacs)<br><b=
r>Memory information:<br>((conses 16 1776894 1225101) (symbols 48 95430 233=
) (strings 32 497290 110775) (string-bytes 1 14508590)<br>=C2=A0(vectors 16=
 142741) (vector-slots 8 2529775 416765) (floats 8 2185 6630) (intervals 56=
 15711 23130)<br>=C2=A0(buffers 1064 20))<br><br></div>

--00000000000051c1e8065bd0253b--




Acknowledgement sent to Len Trigg <lenbok@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to bug-gnu-emacs@HIDDEN:
bug#81894; Package emacs. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Sun, 20 Sep 2026 04:45:02 UTC

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