Merge pull request #31040 from luukvbaal/cmdpreviewcurs

fix(inccommand): ensure cursor is where it belongs
This commit is contained in:
bfredl 2024-11-08 11:22:14 +01:00 committed by GitHub
commit 8ab1903092
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 36 additions and 0 deletions

View File

@ -2550,6 +2550,9 @@ static bool cmdpreview_may_show(CommandLineState *s)
goto end;
}
// Cursor may be at the end of the message grid rather than at cmdspos.
// Place it there in case preview callback flushes it. #30696
cursorcmd();
// Flush now: external cmdline may itself wish to update the screen which is
// currently disallowed during cmdpreview(no longer needed in case that changes).
cmdline_ui_flush();

View File

@ -508,6 +508,39 @@ describe("'inccommand' for user commands", function()
feed(':Test')
eq('nosplit', api.nvim_get_option_value('inccommand', {}))
end)
it('does not flush intermediate cursor position at end of message grid', function()
exec_lua([[
vim.api.nvim_create_user_command('Test', function() end, {
nargs = '*',
preview = function(_, _, _)
vim.api.nvim_buf_set_text(0, 0, 0, 1, -1, { "Preview" })
vim.cmd.sleep("1m")
return 1
end
})
]])
local cursor_goto = screen._handle_grid_cursor_goto
screen._handle_grid_cursor_goto = function(...)
cursor_goto(...)
assert(screen._cursor.col < 12)
end
feed(':Test baz<Left><Left>arb')
screen:expect({
grid = [[
Preview |
oh no, even more text |
will the text ever stop |
oh well |
did the text stop |
why won't it stop |
make the text stop |
|
{1:~ }|*8
:Test barb^az |
]],
})
end)
end)
describe("'inccommand' with multiple buffers", function()