From: Eli Zaretskii <eliz@gnu.org>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: al@petrofsky.org, rudalics@gmx.at, 63967@debbugs.gnu.org
Subject: bug#63967: 28.2; switch-to-buffer in normal window fails if minibuffer window is active
Date: Fri, 09 Jun 2023 19:09:19 +0300 [thread overview]
Message-ID: <83fs701uts.fsf@gnu.org> (raw)
In-Reply-To: <jwvilbw7k2u.fsf-monnier+emacs@gnu.org> (message from Stefan Monnier on Fri, 09 Jun 2023 11:08:43 -0400)
> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: Al Petrofsky <al@petrofsky.org>, martin rudalics <rudalics@gmx.at>,
> 63967@debbugs.gnu.org
> Date: Fri, 09 Jun 2023 11:08:43 -0400
>
> > Seems like read-buffer-to-switch (called by "C-x b") changes the
> > selected-window: when it returns, the rest of the function runs with
> > the minibuffer window being the selected-window, which is wrong in
> > this case.
>
> Are you 100% sure that's what happens?
Yes, I'm sure. First, the window-minibuffer-p call in the interactive
form:
(interactive
(let ((force-same-window
(unless switch-to-buffer-obey-display-actions
(cond
((window-minibuffer-p) nil) <<<<<<<<<<<<<<<<<<<<<<<<<<<<
((not (eq (window-dedicated-p) t)) 'force-same-window)
((pcase switch-to-buffer-in-dedicated-window
('nil (user-error
"Cannot switch buffers in a dedicated window"))
('prompt
(if (y-or-n-p
(format "Window is dedicated to %s; undedicate it?"
(window-buffer)))
(progn
(set-window-dedicated-p nil nil)
'force-same-window)
(user-error
"Cannot switch buffers in a dedicated window")))
('pop nil)
(_ (set-window-dedicated-p nil nil) 'force-same-window)))))))
(list (read-buffer-to-switch "Switch to buffer: ") nil force-same-window)))
returns nil, as expected (since this runs in the window to which we
changed with "C-x p", before Emacs prompts for the buffer to switch
to). But then the call to window-minibuffer-p in the body of the
function:
(let ((buffer (window-normalize-buffer-to-switch-to buffer-or-name))
(set-window-start-and-point (not switch-to-buffer-obey-display-actions)))
(cond
;; Don't call set-window-buffer if it's not needed since it
;; might signal an error (e.g. if the window is dedicated).
((and (eq buffer (window-buffer))
;; pop-to-buffer-same-window might decide to display
;; the same buffer in another window
(not switch-to-buffer-obey-display-actions)))
((and (window-minibuffer-p) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
(not switch-to-buffer-obey-display-actions))
(if force-same-window
(user-error "Cannot switch buffers in minibuffer window")
(pop-to-buffer buffer norecord)))
returns non-nil, although we were supposed to be out of the minibuffer
by that time. I've verified that selected-window returns the original
non-minibuffer window in the first place and the minibuffer window in
the second.
I then ran the recipe under GDB, with a watchpoint on selected_window,
and clearly saw that it stays at its mini-window value by the time we
exit read-buffer-to-switch.
> And if it happens with `read-buffer-to-switch` I can't see any reason
> why it wouldn't happen for most/all other uses of the minibuffer.
It probably does, yes.
next prev parent reply other threads:[~2023-06-09 16:09 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-08 21:32 bug#63967: 28.2; switch-to-buffer in normal window fails if minibuffer window is active Al Petrofsky
2023-06-09 11:16 ` Eli Zaretskii
2023-06-09 15:08 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-06-09 16:09 ` Eli Zaretskii [this message]
2023-06-09 19:18 ` Eli Zaretskii
2023-06-10 15:49 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-06-10 19:42 ` Alan Mackenzie
2023-06-11 5:03 ` Eli Zaretskii
2023-06-11 13:40 ` Alan Mackenzie
2023-06-11 13:53 ` Eli Zaretskii
2023-06-13 18:43 ` Eli Zaretskii
2023-06-13 21:36 ` Alan Mackenzie
2023-06-14 12:15 ` Eli Zaretskii
2023-06-15 10:25 ` Alan Mackenzie
2023-06-17 11:31 ` Alan Mackenzie
2023-06-17 13:08 ` Eli Zaretskii
2023-06-17 13:52 ` martin rudalics
2023-06-17 16:23 ` Alan Mackenzie
2023-06-17 18:46 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-06-11 14:35 ` Drew Adams
2023-06-11 16:01 ` Alan Mackenzie
2023-06-12 7:17 ` martin rudalics
2023-06-12 12:04 ` Eli Zaretskii
2023-06-11 16:12 ` Eli Zaretskii
2023-06-09 16:52 ` Gregory Heytings
2023-06-09 17:21 ` Eli Zaretskii
2023-06-09 20:04 ` Gregory Heytings
2023-06-10 5:59 ` Eli Zaretskii
2023-06-10 6:39 ` Gregory Heytings
2023-06-10 6:45 ` Eli Zaretskii
2023-06-10 8:45 ` Gregory Heytings
2023-06-10 6:52 ` martin rudalics
2023-06-10 8:28 ` Eli Zaretskii
2023-06-10 14:51 ` martin rudalics
2023-06-10 17:09 ` Eli Zaretskii
2023-06-11 8:10 ` martin rudalics
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=83fs701uts.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=63967@debbugs.gnu.org \
--cc=al@petrofsky.org \
--cc=monnier@iro.umontreal.ca \
--cc=rudalics@gmx.at \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).