fix(api): nvim_win_set_cursor() redraw for cursorline and statusline

This commit is contained in:
zeertzjq 2022-02-15 11:12:09 +08:00
parent 1bd6c0a05c
commit f92e74900f
2 changed files with 45 additions and 2 deletions

View File

@ -71,6 +71,7 @@ ArrayOf(Integer, 2) nvim_win_get_cursor(Window window, Error *err)
}
/// Sets the (1,0)-indexed cursor position in the window. |api-indexing|
/// Unlike |win_execute()| this scrolls the window.
///
/// @param window Window handle, or 0 for current window
/// @param pos (row, col) tuple representing the new position
@ -118,6 +119,8 @@ void nvim_win_set_cursor(Window window, ArrayOf(Integer, 2) pos, Error *err)
update_topline_win(win);
redraw_later(win, VALID);
redraw_for_cursorline(win);
win->w_redr_status = true;
}
/// Gets the window height

View File

@ -1,4 +1,5 @@
local helpers = require('test.functional.helpers')(after_each)
local Screen = require('test.functional.ui.screen')
local clear, nvim, curbuf, curbuf_contents, window, curwin, eq, neq,
ok, feed, insert, eval, tabpage = helpers.clear, helpers.nvim, helpers.curbuf,
helpers.curbuf_contents, helpers.window, helpers.curwin, helpers.eq,
@ -73,8 +74,7 @@ describe('API/win', function()
eq('typing\n some dumb text', curbuf_contents())
end)
it('does not leak memory when using invalid window ID with invalid pos',
function()
it('does not leak memory when using invalid window ID with invalid pos', function()
eq('Invalid window id: 1', pcall_err(meths.win_set_cursor, 1, {"b\na"}))
end)
@ -147,6 +147,46 @@ describe('API/win', function()
eq({2, 5}, window('get_cursor', win))
end)
it('updates cursorline and statusline ruler in non-current window', function()
local screen = Screen.new(60, 8)
screen:set_default_attr_ids({
[1] = {bold = true, foreground = Screen.colors.Blue}, -- NonText
[2] = {background = Screen.colors.Grey90}, -- CursorLine
[3] = {bold = true, reverse = true}, -- StatusLine
[4] = {reverse = true}, -- VertSplit, StatusLineNC
})
screen:attach()
command('set ruler')
command('set cursorline')
insert([[
aaa
bbb
ccc
ddd]])
local oldwin = curwin()
command('vsplit')
screen:expect([[
aaa {4:}aaa |
bbb {4:}bbb |
ccc {4:}ccc |
{2:dd^d }{4:}{2:ddd }|
{1:~ }{4:}{1:~ }|
{1:~ }{4:}{1:~ }|
{3:[No Name] [+] 4,3 All }{4:[No Name] [+] 4,3 All}|
|
]])
window('set_cursor', oldwin, {1, 0})
screen:expect([[
aaa {4:}{2:aaa }|
bbb {4:}bbb |
ccc {4:}ccc |
{2:dd^d }{4:}ddd |
{1:~ }{4:}{1:~ }|
{1:~ }{4:}{1:~ }|
{3:[No Name] [+] 4,3 All }{4:[No Name] [+] 1,1 All}|
|
]])
end)
end)
describe('{get,set}_height', function()