diff options
author | Bram Moolenaar <Bram@vim.org> | 2023-06-15 16:40:02 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2023-06-15 16:40:02 +0100 |
commit | 800cdbb7caeb5dd4379c6cb071bb12391f20bcf3 (patch) | |
tree | 8a172c31c31f64f37e2ed96ae819d40e00901f45 | |
parent | 19dfa276c37dcf657922c6f9b48cf2954191e8b6 (diff) |
patch 9.0.1634: message is cleared when removing mode messagev9.0.1634
Problem: Message is cleared when removing mode message (Gary Johnson).
Solution: Do not clear the command line after displaying a message.
-rw-r--r-- | src/message.c | 8 | ||||
-rw-r--r-- | src/testdir/dumps/Test_message_not_cleared_after_mode_1.dump | 10 | ||||
-rw-r--r-- | src/testdir/dumps/Test_message_not_cleared_after_mode_2.dump | 10 | ||||
-rw-r--r-- | src/testdir/test_messages.vim | 28 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 58 insertions, 0 deletions
diff --git a/src/message.c b/src/message.c index 985161d2e8..44c4f85574 100644 --- a/src/message.c +++ b/src/message.c @@ -1641,6 +1641,14 @@ msg_outtrans_len_attr(char_u *msgstr, int len, int attr) attr &= ~MSG_HIST; } + // When drawing over the command line no need to clear it later or remove + // the mode message. + if (msg_row == cmdline_row && msg_col == 0) + { + clear_cmdline = FALSE; + mode_displayed = FALSE; + } + // If the string starts with a composing character first draw a space on // which the composing char can be drawn. if (enc_utf8 && utf_iscomposing(utf_ptr2char(msgstr))) diff --git a/src/testdir/dumps/Test_message_not_cleared_after_mode_1.dump b/src/testdir/dumps/Test_message_not_cleared_after_mode_1.dump new file mode 100644 index 0000000000..9e8d20ac4d --- /dev/null +++ b/src/testdir/dumps/Test_message_not_cleared_after_mode_1.dump @@ -0,0 +1,10 @@ +>o+0&#ffffff0|n|e| @71 +|t|w|o| @71 +|t|h|r|e@1| @69 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|f+0#0000000&|r|o|m| |D|e|b|u|g|S|i|l|e|n|t| |n|o|r|m|a|l| @33|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_message_not_cleared_after_mode_2.dump b/src/testdir/dumps/Test_message_not_cleared_after_mode_2.dump new file mode 100644 index 0000000000..49dabef4f6 --- /dev/null +++ b/src/testdir/dumps/Test_message_not_cleared_after_mode_2.dump @@ -0,0 +1,10 @@ +>o+0&#ffffff0|n|e| @71 +|t|w|o| @71 +|t|h|r|e@1| @69 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|f+0#0000000&|r|o|m| |D|e|b|u|g|S|i|l|e|n|t| |v|i|s|u|a|l| @33|1|,|1| @10|A|l@1| diff --git a/src/testdir/test_messages.vim b/src/testdir/test_messages.vim index ff705fe85f..0647afd287 100644 --- a/src/testdir/test_messages.vim +++ b/src/testdir/test_messages.vim @@ -336,6 +336,34 @@ func Test_message_more_scrollback() call StopVimInTerminal(buf) endfunc +func Test_message_not_cleared_after_mode() + CheckRunVimInTerminal + + let lines =<< trim END + nmap <silent> gx :call DebugSilent('normal')<CR> + vmap <silent> gx :call DebugSilent('visual')<CR> + function DebugSilent(arg) + echomsg "from DebugSilent" a:arg + endfunction + set showmode + set cmdheight=1 + call setline(1, ['one', 'two', 'three']) + END + call writefile(lines, 'XmessageMode', 'D') + let buf = RunVimInTerminal('-S XmessageMode', {'rows': 10}) + + call term_sendkeys(buf, 'gx') + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_message_not_cleared_after_mode_1', {}) + + " removing the mode message used to also clear the intended message + call term_sendkeys(buf, 'vEgx') + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_message_not_cleared_after_mode_2', {}) + + call StopVimInTerminal(buf) +endfunc + " Test verbose message before echo command func Test_echo_verbose_system() CheckRunVimInTerminal diff --git a/src/version.c b/src/version.c index 7a1c730263..8f382e16f4 100644 --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1634, +/**/ 1633, /**/ 1632, |