neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 11060793d6544e893f31d65e8f964453c463407c
parent cba07dad494558a4a06e25a35521041864697be3
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Fri, 16 Jun 2023 08:13:42 +0800

vim-patch:9.0.1635: error message is cleared when removing mode message

Problem:    Error message is cleared when removing mode message.
Solution:   Also reset flags when the message is further down.

https://github.com/vim/vim/commit/da51ad51bf4fbd66619786d0e6a83fb3ca09930b

Co-authored-by: Bram Moolenaar <Bram@vim.org>

Diffstat:
Msrc/nvim/message.c | 2+-
Mtest/functional/legacy/messages_spec.lua | 23++++++++++++++++++++---
Mtest/old/testdir/test_messages.vim | 9++++++++-
3 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/src/nvim/message.c b/src/nvim/message.c @@ -1562,7 +1562,7 @@ int msg_outtrans_len_attr(const char *msgstr, int len, int attr) // 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) { + if (msg_row >= cmdline_row && msg_col == 0) { clear_cmdline = false; mode_displayed = false; } diff --git a/test/functional/legacy/messages_spec.lua b/test/functional/legacy/messages_spec.lua @@ -54,6 +54,7 @@ describe('messages', function() screen = Screen.new(60, 10) screen:set_default_attr_ids({ [0] = {bold = true, foreground = Screen.colors.Blue}, -- NonText + [1] = {background = Screen.colors.Red, foreground = Screen.colors.White}, -- ErrorMsg }) screen:attach() exec([[ @@ -64,13 +65,13 @@ describe('messages', function() endfunction set showmode set cmdheight=1 - call setline(1, ['one', 'two', 'three']) + call setline(1, ['one', 'NoSuchFile', 'three']) ]]) feed('gx') screen:expect([[ ^one | - two | + NoSuchFile | three | {0:~ }| {0:~ }| @@ -85,7 +86,7 @@ describe('messages', function() feed('vEgx') screen:expect([[ ^one | - two | + NoSuchFile | three | {0:~ }| {0:~ }| @@ -95,6 +96,22 @@ describe('messages', function() {0:~ }| from DebugSilent visual | ]]) + + -- removing the mode message used to also clear the error message + command('set cmdheight=2') + feed('2GvEgf') + screen:expect([[ + one | + NoSuchFil^e | + three | + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + from DebugSilent visual | + {1:E447: Can't find file "NoSuchFile" in path} | + ]]) end) describe('more prompt', function() diff --git a/test/old/testdir/test_messages.vim b/test/old/testdir/test_messages.vim @@ -352,7 +352,8 @@ func Test_message_not_cleared_after_mode() endfunction set showmode set cmdheight=1 - call setline(1, ['one', 'two', 'three']) + call test_settime(1) + call setline(1, ['one', 'NoSuchFile', 'three']) END call writefile(lines, 'XmessageMode', 'D') let buf = RunVimInTerminal('-S XmessageMode', {'rows': 10}) @@ -366,6 +367,12 @@ func Test_message_not_cleared_after_mode() call TermWait(buf) call VerifyScreenDump(buf, 'Test_message_not_cleared_after_mode_2', {}) + " removing the mode message used to also clear the error message + call term_sendkeys(buf, ":set cmdheight=2\<CR>") + call term_sendkeys(buf, '2GvEgf') + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_message_not_cleared_after_mode_3', {}) + call StopVimInTerminal(buf) endfunc