Skip to content

Commit

Permalink
fix(api): nvim_win_set_cursor() redraw cursorcolumn for non-current…
Browse files Browse the repository at this point in the history
… window

fix #19063
this fixes the cursorcolumn not being redrawn for non-current windows in `nvim_win_set_cursor()`
  • Loading branch information
Jlll1 committed Nov 16, 2022
1 parent 736c36c commit 3d1b848
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 11 deletions.
9 changes: 7 additions & 2 deletions src/nvim/api/window.c
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,13 @@ void nvim_win_set_cursor(Window window, ArrayOf(Integer, 2) pos, Error *err)
// Make sure we stick in this column.
win->w_set_curswant = true;

// make sure cursor is in visible range even if win != curwin
update_topline_win(win);
// make sure cursor is in visible range and
// cursorcolumn and cursorline are updated even if win != curwin
switchwin_T switchwin;
switch_win(&switchwin, win, NULL, true);
update_topline(curwin);
validate_cursor();
restore_win(&switchwin, true);

redraw_later(win, UPD_VALID);
win->w_redr_status = true;
Expand Down
9 changes: 0 additions & 9 deletions src/nvim/move.c
Original file line number Diff line number Diff line change
Expand Up @@ -333,15 +333,6 @@ void update_topline(win_T *wp)
*so_ptr = save_so;
}

// Update win->w_topline to move the cursor onto the screen.
void update_topline_win(win_T *win)
{
switchwin_T switchwin;
switch_win(&switchwin, win, NULL, true);
update_topline(curwin);
restore_win(&switchwin, true);
}

// Return the scrolljump value to use for the current window.
// When 'scrolljump' is positive use it as-is.
// When 'scrolljump' is negative use it as a percentage of the window height.
Expand Down
30 changes: 30 additions & 0 deletions test/functional/api/window_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,36 @@ describe('API/win', function()
|
]])
end)

it('updates cursorcolumn 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}, -- CursorColumn
[3] = {bold = true, reverse = true}, -- StatusLine
[4] = {reverse = true}, -- StatusLineNC
})
screen:attach()
command('set cursorcolumn')
insert([[
aaa
bbb
ccc
ddd]])
local oldwin = curwin()
command('vsplit')
window('set_cursor', oldwin, {2, 2})
screen:expect([[
aa{2:a} │aa{2:a} |
bb{2:b} │bbb |
cc{2:c} │cc{2:c} |
dd^d │dd{2:d} |
{1:~ }│{1:~ }|
{1:~ }│{1:~ }|
{3:[No Name] [+] }{4:[No Name] [+] }|
|
]])
end)
end)

describe('{get,set}_height', function()
Expand Down

0 comments on commit 3d1b848

Please sign in to comment.