aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluukvbaal <luukvbaal@gmail.com>2024-05-03 04:35:32 +0200
committerGitHub <noreply@github.com>2024-05-03 10:35:32 +0800
commitcf9f002f31c8b4d9d42912a3f45f5d3db4462fd9 (patch)
treeb5c8f0bf55026ff91e709497a534830d26fd659d
parent01e4a70d668d54a7cefa3ff53ec97e39df516265 (diff)
downloadrneovim-cf9f002f31c8b4d9d42912a3f45f5d3db4462fd9.tar.gz
rneovim-cf9f002f31c8b4d9d42912a3f45f5d3db4462fd9.tar.bz2
rneovim-cf9f002f31c8b4d9d42912a3f45f5d3db4462fd9.zip
fix(api): use correct buffer for "range" in nvim__redraw (#28614)
-rw-r--r--src/nvim/api/vim.c7
-rw-r--r--test/functional/api/vim_spec.lua24
2 files changed, 17 insertions, 14 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c
index d8ebc4b94f..f5b7c8abdd 100644
--- a/src/nvim/api/vim.c
+++ b/src/nvim/api/vim.c
@@ -2415,10 +2415,11 @@ void nvim__redraw(Dict(redraw) *opts, Error *err)
});
linenr_T first = (linenr_T)kv_A(opts->range, 0).data.integer + 1;
linenr_T last = (linenr_T)kv_A(opts->range, 1).data.integer;
- if (last < 0) {
- last = buf->b_ml.ml_line_count;
+ buf_T *rbuf = win ? win->w_buffer : (buf ? buf : curbuf);
+ if (last == -1) {
+ last = rbuf->b_ml.ml_line_count;
}
- redraw_buf_range_later(win ? win->w_buffer : (buf ? buf : curbuf), first, last);
+ redraw_buf_range_later(rbuf, first, last);
}
if (opts->cursor) {
diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua
index fbb6d42633..c56c8263d6 100644
--- a/test/functional/api/vim_spec.lua
+++ b/test/functional/api/vim_spec.lua
@@ -5195,28 +5195,27 @@ describe('API', function()
})
-- valid = true does not draw any lines on its own
exec_lua([[
- lines = 0
+ _G.lines = 0
ns = vim.api.nvim_create_namespace('')
- on_win = function()
- if do_win then
- vim.api.nvim_buf_set_extmark(0, ns, 0, 0, { hl_group = 'IncSearch', end_col = 6 })
- end
- end
vim.api.nvim_set_decoration_provider(ns, {
- on_win = on_win,
+ on_win = function()
+ if _G.do_win then
+ vim.api.nvim_buf_set_extmark(0, ns, 0, 0, { hl_group = 'IncSearch', end_col = 6 })
+ end
+ end,
on_line = function()
- lines = lines + 1
+ _G.lines = _G.lines + 1
end,
})
]])
local lines = exec_lua('return lines')
api.nvim__redraw({ buf = 0, valid = true, flush = true })
- eq(lines, exec_lua('return lines'))
+ eq(lines, exec_lua('return _G.lines'))
-- valid = false does
api.nvim__redraw({ buf = 0, valid = false, flush = true })
- neq(lines, exec_lua('return lines'))
+ neq(lines, exec_lua('return _G.lines'))
-- valid = true does redraw lines if affected by on_win callback
- exec_lua('do_win = true')
+ exec_lua('_G.do_win = true')
api.nvim__redraw({ buf = 0, valid = true, flush = true })
screen:expect({
grid = [[
@@ -5227,5 +5226,8 @@ describe('API', function()
13 |
]],
})
+ -- takes buffer line count from correct buffer with "win" and {0, -1} "range"
+ api.nvim__redraw({ win = 0, range = { 0, -1 } })
+ n.assert_alive()
end)
end)