From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.bugs Subject: bug#48674: Frames and minibuffer bug Date: Fri, 28 May 2021 17:15:37 +0000 Message-ID: References: <1911d1b0-ed9f-7359-b28c-fbaef27df8f3@gmx.at> <1e21b121-91c1-cbe9-d9ae-24915f163ae5@gmx.at> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="6692"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 48674@debbugs.gnu.org, Iris =?UTF-8?Q?Garc=C3=ADa?= To: martin rudalics Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri May 28 19:16:20 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lmg5s-0001bh-LB for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 28 May 2021 19:16:20 +0200 Original-Received: from localhost ([::1]:38936 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lmg5r-0002UX-3Q for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 28 May 2021 13:16:19 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:55194) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lmg5c-0002UM-0p for bug-gnu-emacs@gnu.org; Fri, 28 May 2021 13:16:04 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:43721) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lmg5a-0004Kx-E5 for bug-gnu-emacs@gnu.org; Fri, 28 May 2021 13:16:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lmg5a-0008QI-8E for bug-gnu-emacs@gnu.org; Fri, 28 May 2021 13:16:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Alan Mackenzie Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 28 May 2021 17:16:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 48674 X-GNU-PR-Package: emacs Original-Received: via spool by 48674-submit@debbugs.gnu.org id=B48674.162222214632353 (code B ref 48674); Fri, 28 May 2021 17:16:02 +0000 Original-Received: (at 48674) by debbugs.gnu.org; 28 May 2021 17:15:46 +0000 Original-Received: from localhost ([127.0.0.1]:55267 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lmg5K-0008Pl-Gr for submit@debbugs.gnu.org; Fri, 28 May 2021 13:15:46 -0400 Original-Received: from colin.muc.de ([193.149.48.1]:44182 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1lmg5I-0008PY-R2 for 48674@debbugs.gnu.org; Fri, 28 May 2021 13:15:45 -0400 Original-Received: (qmail 22149 invoked by uid 3782); 28 May 2021 17:15:37 -0000 Original-Received: from acm.muc.de (p4fe155b9.dip0.t-ipconnect.de [79.225.85.185]) (using STARTTLS) by colin.muc.de (tmda-ofmipd) with ESMTP; Fri, 28 May 2021 19:15:37 +0200 Original-Received: (qmail 8528 invoked by uid 1000); 28 May 2021 17:15:37 -0000 Content-Disposition: inline In-Reply-To: X-Submission-Agent: TMDA/1.3.x (Ph3nix) X-Primary-Address: acm@muc.de X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:207470 Archived-At: Hello, Martin. On Fri, May 28, 2021 at 10:26:32 +0200, martin rudalics wrote: > >> Does this mean that the > >> Fselect_window (f->selected_window, norecord); > >> in do_switch_frame fails? If so, why? > > For some values of "fails", yes. When we're in frame F1's minibuffer, > > and do (with-selected-frame F2 (foo)): > > (i) Frame F2 becomes selected. > > (ii) The current window in F1 ceases to be the mini-window, becoming some > > other window. > > (iii) The minibuffer is moved from F1 to F2. > > (iv) We evaluate (foo). > > (v) Frame F1 becomes selected again. > > (vi) The current window in F1 doesn't revert to being the mini-window. > But why precisely does Fselect_window fail here? Sorry, my last night's reply wasn't very clear. That Fselect_window in do_switch_frame will fail when a later Fselect_window (or more precisely, Fset_frame_selected_window) in move_minibuffers_onto_frame selects a different window for that frame. That happens when with-selected-frame selects a different frame, moving the minibuffers onto that other frame. I have another idea for solving this problem. Suppose when we switch from F1 to F2, and F1's selected window is the mini-window, we allow F1 to remain in the MW. The minibuffer stack gets moved to F2. Some sort of commands or Lisp runs in F2, then we return to F1. Should any minibuffer come back to F1, we allow the MW to remain selected. Otherwise we select a different window in F1. I think this would work better that what I proposed last night. I'll try and formulate a patch for this this evening. > > This is what has preoccupied me over the last few hours. It seems > > we want do_switch_frame to do different things for (i) a "permanent" > > frame switch (e.g. C-x 5 o) and (i) a "temporary" frame switch (e.g. > > with-selected-frame). If the selected window in F1 is the > > mini-window, we want it to select a different window in (i), but > > stay the same in (ii). > Be careful in one additional regard: The display engine calls > Fselect_window too for its own purposes. .... and Fselect_window calls Fselect_frame, if needed. This hits the same problem. > >> Are we sure that we want to disallow a function on > >> `minibuffer-setup-hook' to change the selected window? With Emacs 27 > >> (defun foo () > >> (select-window (frame-first-window))) > >> (add-hook 'minibuffer-setup-hook 'foo) > >> works without any problems here. > > Are you sure? For me, that setup makes C-x C-f open a minibuffer, > > but leave point in the same window, not the miniwindow. That was a > > quick try with the emacs-27 branch, not Emacs 27.{1,2}, and was on a > > GUI. > Yes. But this is an effect the user/application might want - explicitly > select some other window to, for example (I'm purely speculating), select > a completion window right away. Iris OTOH never wants to select another > window explicitly. OK. > > I think we should disallow selecting windows in minibuffer-setup-hook. > > This hook is run after the mini-window has been selected in read_minibuf, > > just before the recursive edit. > We cannot disallow it. We can only undo its effect. And that would > constitute an incompatible change - do you really want to go for it? Maybe not. I'm going to write a patch as outlined above, which might well be easier to follow than my text above. I think it might well fix the bug properly. > martin -- Alan Mackenzie (Nuremberg, Germany).