From: Alan Mackenzie Date: Sat, 28 May 2022 12:55:32 +0000 (+0000) Subject: do_switch_frame: before leaving mini-window, check other (mru) window is live X-Git-Tag: emacs-28.1.90~59 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f9ee83bfb9;p=emacs.git do_switch_frame: before leaving mini-window, check other (mru) window is live This fixes bug#55684. There, with a minibuffer-only frame at start up, Emacs tried to switch to this frame, whose selected window was the mini-window. There is no other active window in this frame, so the attempt to swith to another window failed. * src/frame.c (do_switch_frame): On switching to a frame whose selected window is as above, before selecting the most recently used window, check this ostensible window is an actual live window. Otherwise leave the mini-window selected. --- diff --git a/src/frame.c b/src/frame.c index dc8045f41e6..0c278259a79 100644 --- a/src/frame.c +++ b/src/frame.c @@ -1568,8 +1568,14 @@ do_switch_frame (Lisp_Object frame, int track, int for_deletion, Lisp_Object nor to a different window, the most recently used one, unless there is a valid active minibuffer in the mini-window. */ if (EQ (f->selected_window, f->minibuffer_window) + /* The following test might fail if the mini-window contains a + non-active minibuffer. */ && NILP (Fminibufferp (XWINDOW (f->minibuffer_window)->contents, Qt))) - Fset_frame_selected_window (frame, call1 (Qget_mru_window, frame), Qnil); + { + Lisp_Object w = call1 (Qget_mru_window, frame); + if (WINDOW_LIVE_P (w)) /* W can be nil in minibuffer-only frames. */ + Fset_frame_selected_window (frame, w, Qnil); + } Fselect_window (f->selected_window, norecord);