]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.0351: message window may obscure the command line v9.0.0351
authorBram Moolenaar <Bram@vim.org>
Thu, 1 Sep 2022 15:43:17 +0000 (16:43 +0100)
committerBram Moolenaar <Bram@vim.org>
Thu, 1 Sep 2022 15:43:17 +0000 (16:43 +0100)
Problem:    Message window may obscure the command line.
Solution:   Reduce the maximum height of the message window.

src/eval.c
src/popupwin.c
src/testdir/dumps/Test_echowindow_4.dump [new file with mode: 0644]
src/testdir/test_messages.vim
src/version.c

index 2e8d938ec63cbf3fe2f81a6f3e2f601d4d3b70d3..f55d9de8ecf3b50c588742181a69ff24fd7cdcdf 100644 (file)
@@ -6729,7 +6729,8 @@ ex_execute(exarg_T *eap)
 
     ga_init2(&ga, 1, 80);
 #ifdef HAS_MESSAGE_WINDOW
-    in_echowindow = (eap->cmdidx == CMD_echowindow);
+    if (eap->cmdidx == CMD_echowindow)
+       start_echowindow();
 #endif
 
     if (eap->skip)
@@ -6833,17 +6834,7 @@ ex_execute(exarg_T *eap)
        --emsg_skip;
 #ifdef HAS_MESSAGE_WINDOW
     if (eap->cmdidx == CMD_echowindow)
-    {
-       // show the message window now
-       ex_redraw(eap);
-
-       // do not overwrite messages
-       // TODO: only for message window
-       msg_didout = TRUE;
-       if (msg_col == 0)
-           msg_col = 1;
-       in_echowindow = FALSE;
-    }
+       end_echowindow();
 #endif
     set_nextcmd(eap, arg);
 }
index 72d3878799b4dc48da94eac9d2ae2c6c9ce515a2..8688f3e3d13e344aade394e79ef15f7af5f3ce00 100644 (file)
@@ -1356,6 +1356,8 @@ popup_adjust_position(win_T *wp)
 
     if (wp->w_maxheight > 0)
        maxheight = wp->w_maxheight;
+    else if (wp->w_popup_pos == POPPOS_BOTTOM)
+       maxheight = cmdline_row - 1;
 
     // start at the desired first line
     if (wp->w_firstline > 0)
@@ -4479,6 +4481,7 @@ popup_get_message_win(void)
        message_win->w_popup_pos = POPPOS_BOTTOM;
        message_win->w_wantcol = 1;
        message_win->w_minwidth = 9999;
+       message_win->w_firstline = -1;
 
        // no padding, border at the top
        for (i = 0; i < 4; ++i)
diff --git a/src/testdir/dumps/Test_echowindow_4.dump b/src/testdir/dumps/Test_echowindow_4.dump
new file mode 100644 (file)
index 0000000..b674e9e
--- /dev/null
@@ -0,0 +1,8 @@
+>═+0#e000002#ffffff0@74
+|l|i|n|e| |1|4| @67
+|l|i|n|e| |1|5| @67
+|l|i|n|e| |1|6| @67
+|l|i|n|e| |1|7| @67
+|l|i|n|e| |1|8| @67
+|l|i|n|e| |1|9| @67
+| +0#0000000&@56|1|,|1| @10|A|l@1| 
index 6bdaedfd69c7832734f1f97aad4f3574971ada9e..10af69c67d826676d85ac5d80c2522feb1f6ea7e 100644 (file)
@@ -396,6 +396,11 @@ func Test_echowindow()
         echowindow a:arg
       endfunc
       echowindow 'first line'
+      func ManyMessages()
+        for n in range(20)
+          echowindow 'line' n
+        endfor
+      endfunc
   END
   call writefile(lines, 'XtestEchowindow')
   let buf = RunVimInTerminal('-S XtestEchowindow', #{rows: 8})
@@ -407,6 +412,9 @@ func Test_echowindow()
   call term_sendkeys(buf, ":call popup_clear()\<CR>")
   call VerifyScreenDump(buf, 'Test_echowindow_3', {})
 
+  call term_sendkeys(buf, ":call ManyMessages()\<CR>")
+  call VerifyScreenDump(buf, 'Test_echowindow_4', {})
+
   " clean up
   call StopVimInTerminal(buf)
   call delete('XtestEchowindow')
index f7d7d6203d707f01f7374dc1c5df32516e037cfe..4c05bb0592cbd9de93cc408351f4a1320add0852 100644 (file)
@@ -707,6 +707,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    351,
 /**/
     350,
 /**/