]> git.eshelyaron.com Git - emacs.git/commitdiff
Ensure mini-window is resized to show active minibuffer contents
authorEli Zaretskii <eliz@gnu.org>
Mon, 30 Dec 2019 16:00:17 +0000 (18:00 +0200)
committerEli Zaretskii <eliz@gnu.org>
Mon, 30 Dec 2019 16:00:17 +0000 (18:00 +0200)
* src/keyboard.c (read_char, command_loop_1): Resize the
mini-window after clearing the echo area while minibuffer is
active.  (Bug#38645)

src/keyboard.c

index 4cf1f64b487374c1b251950d71fe4f0b3f8f8d97..cb311efd7e5cd7bd28d380d1e1414ea3f175c0f5 100644 (file)
@@ -1318,6 +1318,11 @@ command_loop_1 (void)
          message1 (0);
          safe_run_hooks (Qecho_area_clear_hook);
 
+         /* We cleared the echo area, and the minibuffer will now
+            show, so resize the mini-window in case the minibuffer
+            needs more or less space than the echo area.  */
+         resize_mini_window (XWINDOW (minibuf_window), false);
+
          unbind_to (count, Qnil);
 
          /* If a C-g came in before, treat it as input now.  */
@@ -2989,6 +2994,16 @@ read_char (int commandflag, Lisp_Object map,
        {
          safe_run_hooks (Qecho_area_clear_hook);
          clear_message (1, 0);
+         /* If we were showing the echo-area message on top of an
+            active minibuffer, resize the mini-window, since the
+            minibuffer may need more or less space than the echo area
+            we've just wiped.  */
+         if (minibuf_level
+             && EQ (minibuf_window, echo_area_window)
+             /* The case where minibuffer-message-timeout is a number
+                was already handled near the beginning of command_loop_1.  */
+             && !NUMBERP (Vminibuffer_message_timeout))
+           resize_mini_window (XWINDOW (minibuf_window), false);
        }
       else if (FUNCTIONP (Vclear_message_function))
         clear_message (1, 0);