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.
diff --git a/src/eval.c b/src/eval.c
index 2e8d938..f55d9de 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -6729,7 +6729,8 @@
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 @@
--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);
}
diff --git a/src/popupwin.c b/src/popupwin.c
index 72d38787..8688f3e 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -1356,6 +1356,8 @@
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 @@
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
index 0000000..b674e9e
--- /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|
diff --git a/src/testdir/test_messages.vim b/src/testdir/test_messages.vim
index 6bdaedf..10af69c 100644
--- a/src/testdir/test_messages.vim
+++ b/src/testdir/test_messages.vim
@@ -396,6 +396,11 @@
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 @@
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')
diff --git a/src/version.c b/src/version.c
index f7d7d62..4c05bb0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -708,6 +708,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 351,
+/**/
350,
/**/
349,