fix(messages): single event for multi-expr :echo (#34393)

Problem:  Separate "msg_show" event for each expression in a multi-expr
          :echo(n) command.
Solution: Only set the kind when `atstart == true`.
This commit is contained in:
luukvbaal
2025-06-09 18:58:31 +02:00
committed by GitHub
parent e876a739ee
commit a5f236291c
2 changed files with 26 additions and 1 deletions

View File

@@ -7846,6 +7846,7 @@ void ex_echo(exarg_T *eap)
if (!eap->skip) {
if (atstart) {
atstart = false;
msg_ext_set_kind("echo");
// Call msg_start() after eval1(), evaluating the expression
// may cause a message to appear.
if (eap->cmdidx == CMD_echo) {
@@ -7862,7 +7863,6 @@ void ex_echo(exarg_T *eap)
}
char *tofree = encode_tv2echo(&rettv, NULL);
if (*tofree != NUL) {
msg_ext_set_kind("echo");
msg_ext_append = eap->cmdidx == CMD_echon;
msg_multiline(cstr_as_string(tofree), echo_hl_id, true, false, &need_clear);
}

View File

@@ -1748,6 +1748,31 @@ stack traceback:
})
eq("E354: Invalid register name: '^@'", eval('msg'):gsub('\n', ''))
end)
it('single event for multi-expr :echo', function()
command('echo 1 2 | echon 1 2')
screen:expect({
grid = [[
^ |
{1:~ }|*4
]],
messages = {
{
content = { { '1 2' } },
kind = 'echo',
},
{
append = true,
content = { { '12' } },
kind = 'echo',
},
{
content = { { 'Press ENTER or type command to continue', 6, 18 } },
kind = 'return_prompt',
},
},
})
end)
end)
describe('ui/builtin messages', function()