diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-09-01 16:43:17 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-09-01 16:43:17 +0100 |
commit | b5b4f61cf192324379b6a8c4f7ed83a13f0e3bc6 (patch) | |
tree | fa39548983e85dc2255c0dba25a17b9561a97e29 | |
parent | 7d7ad7b2e8c6403033fbdb083f092321c0ccbfaf (diff) | |
download | vim-git-b5b4f61cf192324379b6a8c4f7ed83a13f0e3bc6.tar.gz |
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.c | 15 | ||||
-rw-r--r-- | src/popupwin.c | 3 | ||||
-rw-r--r-- | src/testdir/dumps/Test_echowindow_4.dump | 8 | ||||
-rw-r--r-- | src/testdir/test_messages.vim | 8 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 24 insertions, 12 deletions
diff --git a/src/eval.c b/src/eval.c index 2e8d938ec..f55d9de8e 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 72d387879..8688f3e3d 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 000000000..b674e9e6f --- /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 6bdaedfd6..10af69c67 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 f7d7d6203..4c05bb059 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, |