fix(api): update topline when flushing with nvim__redraw() (#34346)

Problem:  nvim__redraw may update the screen with an invalid topline.
Solution: Update the topline before calling `update_screen()` (as
          :redraw does).
(cherry picked from commit af82f36108)
This commit is contained in:
luukvbaal
2025-06-07 11:24:24 +02:00
committed by github-actions[bot]
parent c0201909c7
commit 8d3b7b57c8
2 changed files with 30 additions and 0 deletions

View File

@ -2357,6 +2357,8 @@ void nvim__redraw(Dict(redraw) *opts, Error *err)
// Redraw pending screen updates when explicitly requested or when determined
// that it is necessary to properly draw other requested components.
if (opts->flush && !cmdpreview) {
validate_cursor(curwin);
update_topline(curwin);
update_screen();
}

View File

@ -5511,4 +5511,32 @@ describe('API', function()
n.assert_alive()
end)
it('nvim__redraw updates topline', function()
local screen = Screen.new(40, 8)
fn.setline(1, fn.range(100))
feed(':call getchar()<CR>')
fn.cursor(50, 1)
screen:expect([[
0 |
1 |
2 |
3 |
4 |
5 |
6 |
^:call getchar() |
]])
api.nvim__redraw({ flush = true })
screen:expect([[
46 |
47 |
48 |
49 |
50 |
51 |
52 |
^:call getchar() |
]])
end)
end)