summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-08-28 21:36:43 +0100
committerBram Moolenaar <Bram@vim.org>2022-08-28 21:36:43 +0100
commit134b86553c12c46e0ae7d534f6fe65e8ba2d50bc (patch)
tree11fffb0e3c9fccdd446276d1414c508d1bc98e3f
parentf2fb54f641aa0e8a64356e4d0053f89b52c78229 (diff)
patch 9.0.0307: :echomsg doesn't work properly with cmdheight=0v9.0.0307
Problem: :echomsg doesn't work properly with cmdheight=0. Solution: Improve scrolling and displaying.
-rw-r--r--src/eval.c11
-rw-r--r--src/ex_docmd.c11
-rw-r--r--src/testdir/dumps/Test_cmdheight_zero_6.dump6
-rw-r--r--src/testdir/dumps/Test_cmdheight_zero_7.dump6
-rw-r--r--src/testdir/dumps/Test_cmdheight_zero_8.dump6
-rw-r--r--src/testdir/test_messages.vim15
-rw-r--r--src/version.c2
7 files changed, 54 insertions, 3 deletions
diff --git a/src/eval.c b/src/eval.c
index 3d6d84c2bb..8cd2716406 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -6824,7 +6824,18 @@ ex_execute(exarg_T *eap)
if (eap->skip)
--emsg_skip;
+#ifdef HAS_MESSAGE_WINDOW
+ if (use_message_window() && eap->cmdidx != CMD_execute)
+ {
+ // show the message window now
+ ex_redraw(eap);
+ // do not overwrite messages
+ msg_didout = TRUE;
+ if (msg_col == 0)
+ msg_col = 1;
+ }
+#endif
set_nextcmd(eap, arg);
}
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 89c9d26b0f..598c6b7c32 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -8370,9 +8370,14 @@ ex_redraw(exarg_T *eap)
// After drawing the statusline screen_attr may still be set.
screen_stop_highlight();
- // Reset msg_didout, so that a message that's there is overwritten.
- msg_didout = FALSE;
- msg_col = 0;
+#ifdef HAS_MESSAGE_WINDOW
+ if (!use_message_window()) // append messages in the message window
+#endif
+ {
+ // Reset msg_didout, so that a message that's there is overwritten.
+ msg_didout = FALSE;
+ msg_col = 0;
+ }
// No need to wait after an intentional redraw.
need_wait_return = FALSE;
diff --git a/src/testdir/dumps/Test_cmdheight_zero_6.dump b/src/testdir/dumps/Test_cmdheight_zero_6.dump
new file mode 100644
index 0000000000..7af84c9216
--- /dev/null
+++ b/src/testdir/dumps/Test_cmdheight_zero_6.dump
@@ -0,0 +1,6 @@
+|s+0&#ffffff0|o|m|e| >t|e|x|t| @65
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
diff --git a/src/testdir/dumps/Test_cmdheight_zero_7.dump b/src/testdir/dumps/Test_cmdheight_zero_7.dump
new file mode 100644
index 0000000000..3c57623a65
--- /dev/null
+++ b/src/testdir/dumps/Test_cmdheight_zero_7.dump
@@ -0,0 +1,6 @@
+|s+0&#ffffff0|o|m|e| >t|e|x|t| @65
+|~+0#4040ff13&| @73
+|~| @73
+|═+0#e000002&@74
+|s|o|m|e| |t|e|x|t| @65
+|s|o|m|e| |m|o|r|e| |t|e|x|t| @60
diff --git a/src/testdir/dumps/Test_cmdheight_zero_8.dump b/src/testdir/dumps/Test_cmdheight_zero_8.dump
new file mode 100644
index 0000000000..6dbd42c5d1
--- /dev/null
+++ b/src/testdir/dumps/Test_cmdheight_zero_8.dump
@@ -0,0 +1,6 @@
+|s+0&#ffffff0|o|m|e| >t|e|x|t| @65
+|~+0#4040ff13&| @73
+|═+0#e000002&@74
+|s|o|m|e| |t|e|x|t| @65
+|s|o|m|e| |m|o|r|e| |t|e|x|t| @60
+|e|v|e|n| |m|o|r|e| |t|e|x|t| @60
diff --git a/src/testdir/test_messages.vim b/src/testdir/test_messages.vim
index f714478efc..8683adcf97 100644
--- a/src/testdir/test_messages.vim
+++ b/src/testdir/test_messages.vim
@@ -478,6 +478,13 @@ func Test_cmdheight_zero_dump()
set cmdheight=0
set showmode
call setline(1, 'some text')
+ func ShowMessages()
+ echomsg 'some text'
+ sleep 100m
+ echomsg 'some more text'
+ sleep 2500m
+ echomsg 'even more text'
+ endfunc
END
call writefile(lines, 'XtestCmdheight')
let buf = RunVimInTerminal('-S XtestCmdheight', #{rows: 6})
@@ -501,6 +508,14 @@ func Test_cmdheight_zero_dump()
call term_sendkeys(buf, ":w XsomeText\<CR>")
call VerifyScreenDump(buf, 'Test_cmdheight_zero_5', {})
+ call term_sendkeys(buf, ":call popup_clear()\<CR>")
+ call VerifyScreenDump(buf, 'Test_cmdheight_zero_6', {})
+
+ call term_sendkeys(buf, ":call ShowMessages()\<CR>")
+ call VerifyScreenDump(buf, 'Test_cmdheight_zero_7', {})
+ sleep 2
+ call VerifyScreenDump(buf, 'Test_cmdheight_zero_8', {})
+
" clean up
call StopVimInTerminal(buf)
call delete('XtestCmdheight')
diff --git a/src/version.c b/src/version.c
index b69b74ad89..80ce6fedea 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 */
/**/
+ 307,
+/**/
306,
/**/
305,