diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-11-24 06:13:24 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-24 06:13:24 +0800 |
commit | 951034614110cf2e4388645ee17ed4a315d0d382 (patch) | |
tree | b548a061db1dd94cc47e11363c0f6e290593ccab | |
parent | 4ed1c2a8afc71f1e3e2bc6835dc95f284782fe52 (diff) | |
download | rneovim-951034614110cf2e4388645ee17ed4a315d0d382.tar.gz rneovim-951034614110cf2e4388645ee17ed4a315d0d382.tar.bz2 rneovim-951034614110cf2e4388645ee17ed4a315d0d382.zip |
vim-patch:9.0.2125: File info disappears when 'cmdheight' has decreased (#26180)
Problem: File info disappears immediately when 'cmdheight' has just
decreased due to switching tabpage and 'shortmess' doesn't
contain 'o' or 'O'.
Solution: Make sure msg_row isn't smaller than cmdline_row.
fixes: vim/vim#13560
closes: vim/vim#13561
https://github.com/vim/vim/commit/40ed6711bd385051021691980e8ce16375b4b510
-rw-r--r-- | src/nvim/message.c | 6 | ||||
-rw-r--r-- | test/functional/legacy/messages_spec.lua | 42 | ||||
-rw-r--r-- | test/old/testdir/test_messages.vim | 23 |
3 files changed, 70 insertions, 1 deletions
diff --git a/src/nvim/message.c b/src/nvim/message.c index d9f9c26243..2ff0172ac4 100644 --- a/src/nvim/message.c +++ b/src/nvim/message.c @@ -1395,7 +1395,11 @@ void msg_ext_set_kind(const char *msg_kind) /// Prepare for outputting characters in the command line. void msg_start(void) { - int did_return = false; + bool did_return = false; + + if (msg_row < cmdline_row) { + msg_row = cmdline_row; + } if (!msg_silent) { XFREE_CLEAR(keep_msg); // don't display old message now diff --git a/test/functional/legacy/messages_spec.lua b/test/functional/legacy/messages_spec.lua index 7536506aa3..e0cc1dc79c 100644 --- a/test/functional/legacy/messages_spec.lua +++ b/test/functional/legacy/messages_spec.lua @@ -727,6 +727,46 @@ describe('messages', function() ]]) end) + -- oldtest: Test_fileinfo_tabpage_cmdheight() + it("fileinfo works when 'cmdheight' has just decreased", function() + screen = Screen.new(40, 6) + screen:set_default_attr_ids({ + [0] = {bold = true, foreground = Screen.colors.Blue}; -- NonText + [1] = {bold = true}; -- TabLineSel + [2] = {underline = true, background = Screen.colors.LightGrey}; -- TabLine + [3] = {reverse = true}; -- TabLineFill + }) + screen:attach() + + exec([[ + set shortmess-=o + set shortmess-=O + set shortmess-=F + tabnew + set cmdheight=2 + ]]) + command('mode') -- FIXME: bottom is invalid after scrolling + screen:expect([[ + {2: [No Name] }{1: [No Name] }{3: }{2:X}| + ^ | + {0:~ }| + {0:~ }| + | + | + ]]) + + feed(':tabprev | edit Xfileinfo.txt<CR>') + screen:expect([[ + {1: Xfileinfo.txt }{2: [No Name] }{3: }{2:X}| + ^ | + {0:~ }| + {0:~ }| + {0:~ }| + "Xfileinfo.txt" [New] | + ]]) + assert_alive() + end) + -- oldtest: Test_fileinfo_after_echo() it('fileinfo does not overwrite echo message vim-patch:8.2.4156', function() screen = Screen.new(40, 6) @@ -734,6 +774,7 @@ describe('messages', function() [0] = {bold = true, foreground = Screen.colors.Blue}, -- NonText }) screen:attach() + exec([[ set shortmess-=F @@ -747,6 +788,7 @@ describe('messages', function() autocmd CursorHold * buf b.txt | w | echo "'b' written" ]]) + command('set updatetime=50') feed('0$') screen:expect([[ diff --git a/test/old/testdir/test_messages.vim b/test/old/testdir/test_messages.vim index 9a999d71a8..5ebcb375b6 100644 --- a/test/old/testdir/test_messages.vim +++ b/test/old/testdir/test_messages.vim @@ -485,6 +485,29 @@ func Test_echo_string_partial() call assert_equal("function('CountSpaces', [{'ccccccccccc': ['ab', 'cd'], 'aaaaaaaaaaa': v:false, 'bbbbbbbbbbbb': ''}])", string(function('CountSpaces', [#{aaaaaaaaaaa: v:false, bbbbbbbbbbbb: '', ccccccccccc: ['ab', 'cd']}]))) endfunc +" Test that fileinfo is shown properly when 'cmdheight' has just decreased +" due to switching tabpage and 'shortmess' doesn't contain 'o' or 'O'. +func Test_fileinfo_tabpage_cmdheight() + CheckRunVimInTerminal + + let content =<< trim END + set shortmess-=o + set shortmess-=O + set shortmess-=F + tabnew + set cmdheight=2 + tabprev + edit Xfileinfo.txt + END + + call writefile(content, 'Xtest_fileinfo_tabpage_cmdheight', 'D') + let buf = RunVimInTerminal('-S Xtest_fileinfo_tabpage_cmdheight', #{rows: 6}) + call WaitForAssert({-> assert_match('^"Xfileinfo.txt" \[New\]', term_getline(buf, 6))}) + + " clean up + call StopVimInTerminal(buf) +endfunc + " Message output was previously overwritten by the fileinfo display, shown " when switching buffers. If a buffer is switched to, then a message if " echoed, we should show the message, rather than overwriting it with |