fix(cmdline): trigger CmdlineChanged after command preview (#35254)

This commit is contained in:
zeertzjq
2025-08-09 09:16:13 +08:00
committed by GitHub
parent b2828af5b5
commit 5977bdba05
2 changed files with 54 additions and 23 deletions

View File

@@ -2793,15 +2793,6 @@ static void do_autocmd_cmdlinechanged(int firstc)
static int command_line_changed(CommandLineState *s) static int command_line_changed(CommandLineState *s)
{ {
if (ccline.cmdpos != s->prev_cmdpos
|| (s->prev_cmdbuff != NULL
&& strncmp(s->prev_cmdbuff, ccline.cmdbuff, (size_t)s->prev_cmdpos) != 0)) {
// Trigger CmdlineChanged autocommands.
do_autocmd_cmdlinechanged(s->firstc > 0 ? s->firstc : '-');
}
may_trigger_cursormovedc(s);
const bool prev_cmdpreview = cmdpreview; const bool prev_cmdpreview = cmdpreview;
if (s->firstc == ':' if (s->firstc == ':'
&& current_sctx.sc_sid == 0 // only if interactive && current_sctx.sc_sid == 0 // only if interactive
@@ -2823,6 +2814,15 @@ static int command_line_changed(CommandLineState *s)
} }
} }
if (ccline.cmdpos != s->prev_cmdpos
|| (s->prev_cmdbuff != NULL
&& strncmp(s->prev_cmdbuff, ccline.cmdbuff, (size_t)s->prev_cmdpos) != 0)) {
// Trigger CmdlineChanged autocommands.
do_autocmd_cmdlinechanged(s->firstc > 0 ? s->firstc : '-');
}
may_trigger_cursormovedc(s);
if (p_arshape && !p_tbidi) { if (p_arshape && !p_tbidi) {
// Always redraw the whole command line to fix shaping and // Always redraw the whole command line to fix shaping and
// right-left typing. Not efficient, but it works. // right-left typing. Not efficient, but it works.

View File

@@ -569,20 +569,51 @@ describe("'inccommand' for user commands", function()
assert(screen._cursor.col < 12) assert(screen._cursor.col < 12)
end end
feed(':Test baz<Left><Left>arb') feed(':Test baz<Left><Left>arb')
screen:expect({ screen:expect([[
grid = [[ Preview |
Preview | oh no, even more text |
oh no, even more text | will the text ever stop |
will the text ever stop | oh well |
oh well | did the text stop |
did the text stop | why won't it stop |
why won't it stop | make the text stop |
make the text stop | |
| {1:~ }|*8
{1:~ }|*8 :Test barb^az |
:Test barb^az | ]])
]], end)
})
it('works when CmdlineChanged calls wildtrigger() #35246', function()
api.nvim_buf_set_text(0, 0, 0, 1, -1, { '' })
exec_lua([[
vim.api.nvim_create_user_command("Repro", function() end, {
nargs = '+',
preview = function(opts, ns, buf)
vim.api.nvim_buf_set_lines(0, 0, -1, true, { opts.args })
return 2
end
})
]])
command([[autocmd CmdlineChanged [:/\?] call wildtrigger()]])
command('set wildmode=noselect:lastused,full wildoptions=pum')
feed(':Repro ')
screen:expect([[
|
{1:~ }|*15
:Repro ^ |
]])
feed('a')
screen:expect([[
a |
{1:~ }|*15
:Repro a^ |
]])
feed('bc')
screen:expect([[
abc |
{1:~ }|*15
:Repro abc^ |
]])
end) end)
end) end)