changeset 30027:7e787f94852b v9.0.0351

patch 9.0.0351: message window may obscure the command line Commit: https://github.com/vim/vim/commit/b5b4f61cf192324379b6a8c4f7ed83a13f0e3bc6 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Sep 1 16:43:17 2022 +0100 patch 9.0.0351: message window may obscure the command line Problem: Message window may obscure the command line. Solution: Reduce the maximum height of the message window.
author Bram Moolenaar <Bram@vim.org>
date Thu, 01 Sep 2022 17:45:03 +0200
parents 139557ff6c5b
children 2ee12f894bb0
files src/eval.c src/popupwin.c src/testdir/dumps/Test_echowindow_4.dump src/testdir/test_messages.vim src/version.c
diffstat 5 files changed, 24 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -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);
 }
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -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)
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_echowindow_4.dump
@@ -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| 
--- a/src/testdir/test_messages.vim
+++ b/src/testdir/test_messages.vim
@@ -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')
--- a/src/version.c
+++ b/src/version.c
@@ -708,6 +708,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    351,
+/**/
     350,
 /**/
     349,