fix(api): alloc and draw cursor window in nvim__redraw

Problem:  Unable to move cursor to recently opened window.
Solution: Make sure uninitialized window is drawn before trying to move
          the cursor to it.
This commit is contained in:
Luuk van Baal
2024-05-20 20:21:11 +02:00
parent 5fc25ecc7a
commit 89f9f168a5
2 changed files with 35 additions and 9 deletions

View File

@@ -4969,12 +4969,29 @@ describe('API', function()
it('nvim__redraw', function()
local screen = Screen.new(60, 5)
screen:attach()
local win = api.nvim_get_current_win()
eq('at least one action required', pcall_err(api.nvim__redraw, {}))
eq('at least one action required', pcall_err(api.nvim__redraw, { buf = 0 }))
eq('at least one action required', pcall_err(api.nvim__redraw, { win = 0 }))
eq("cannot use both 'buf' and 'win'", pcall_err(api.nvim__redraw, { buf = 0, win = 0 }))
local win = api.nvim_get_current_win()
-- Can move cursor to recently opened window and window is flushed #28868
feed(':echo getchar()<CR>')
local newwin = api.nvim_open_win(0, false, {
relative = 'editor',
width = 1,
height = 1,
row = 1,
col = 10,
})
api.nvim__redraw({ win = newwin, cursor = true })
screen:expect({
grid = [[
|
{1:~ }{4:^ }{1: }|
{1:~ }|*2
:echo getchar() |
]],
})
fn.setline(1, 'foobar')
command('vnew')
fn.setline(1, 'foobaz')
@@ -4983,11 +5000,13 @@ describe('API', function()
screen:expect({
grid = [[
foobaz │foobar |
{1:~ }│{1:~ }|*2
{1:~ }{4:^f}{1: }│{1:~ }|
{1:~ }│{1:~ }|
{3:[No Name] [+] }{2:[No Name] [+] }|
^:echo getchar() |
:echo getchar() |
]],
})
api.nvim_win_close(newwin, true)
-- Can update the grid cursor position #20793
api.nvim__redraw({ cursor = true })
screen:expect({