summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-09-01 16:43:17 +0100
committerBram Moolenaar <Bram@vim.org>2022-09-01 16:43:17 +0100
commitb5b4f61cf192324379b6a8c4f7ed83a13f0e3bc6 (patch)
treefa39548983e85dc2255c0dba25a17b9561a97e29
parent7d7ad7b2e8c6403033fbdb083f092321c0ccbfaf (diff)
patch 9.0.0351: message window may obscure the command linev9.0.0351
Problem: Message window may obscure the command line. Solution: Reduce the maximum height of the message window.
-rw-r--r--src/eval.c15
-rw-r--r--src/popupwin.c3
-rw-r--r--src/testdir/dumps/Test_echowindow_4.dump8
-rw-r--r--src/testdir/test_messages.vim8
-rw-r--r--src/version.c2
5 files changed, 24 insertions, 12 deletions
diff --git a/src/eval.c b/src/eval.c
index 2e8d938ec6..f55d9de8ec 100644
--- 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);
}
diff --git a/src/popupwin.c b/src/popupwin.c
index 72d3878799..8688f3e3d1 100644
--- 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)
diff --git a/src/testdir/dumps/Test_echowindow_4.dump b/src/testdir/dumps/Test_echowindow_4.dump
new file mode 100644
index 0000000000..b674e9e6fb
--- /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 6bdaedfd69..10af69c67d 100644
--- 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')
diff --git a/src/version.c b/src/version.c
index f7d7d6203d..4c05bb0592 100644
--- 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,