Merge pull request #24037 from zeertzjq/vim-9.0.1634

vim-patch:9.0.{1634,1635}: message is cleared when removing mode message
This commit is contained in:
zeertzjq 2023-06-16 09:20:41 +08:00 committed by GitHub
commit 8376e8700b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 108 additions and 1 deletions

View File

@ -1560,6 +1560,13 @@ int msg_outtrans_len_attr(const char *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 (utf_iscomposing(utf_ptr2char(msgstr))) {

View File

@ -49,6 +49,71 @@ describe('messages', function()
]])
end)
-- oldtest: Test_message_not_cleared_after_mode()
it('clearing mode does not remove message', 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([[
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', 'NoSuchFile', 'three'])
]])
feed('gx')
screen:expect([[
^one |
NoSuchFile |
three |
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
from DebugSilent normal |
]])
-- removing the mode message used to also clear the intended message
feed('vEgx')
screen:expect([[
^one |
NoSuchFile |
three |
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{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()
before_each(function()
command('set more')

View File

@ -2475,7 +2475,7 @@ describe("TUI as a client", function()
-- grid smaller than containing terminal window is cleared properly
feed_data(":call setline(1,['a'->repeat(&columns)]->repeat(&lines))\n")
feed_data("0:set lines=2\n")
feed_data("0:set lines=3\n")
screen_server:expect{grid=[[
{1:a}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
{5:[No Name] [+] }|

View File

@ -341,6 +341,41 @@ 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 test_settime(1)
call setline(1, ['one', 'NoSuchFile', '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', {})
" 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
" Test verbose message before echo command
func Test_echo_verbose_system()
CheckRunVimInTerminal