aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJlll1 <arghantentua@tutanota.com>2022-11-17 00:18:31 +0100
committerGitHub <noreply@github.com>2022-11-17 07:18:31 +0800
commitfedf002cb34d0d7a50c54f84a2f161984db2a4c2 (patch)
tree5d8e0d5af7cc1821f219fef1029f93bddb833eb3
parentc404f9b4baf57b946d4dd8d00fce5225e2b5131b (diff)
downloadrneovim-fedf002cb34d0d7a50c54f84a2f161984db2a4c2.tar.gz
rneovim-fedf002cb34d0d7a50c54f84a2f161984db2a4c2.tar.bz2
rneovim-fedf002cb34d0d7a50c54f84a2f161984db2a4c2.zip
fix(api): nvim_win_set_cursor redraw cursorcolumn for non-current window (#21072)
fix #19063 this fixes the cursorcolumn not being redrawn for non-current windows in `nvim_win_set_cursor()`
-rw-r--r--src/nvim/api/window.c9
-rw-r--r--src/nvim/move.c9
-rw-r--r--test/functional/api/window_spec.lua40
3 files changed, 47 insertions, 11 deletions
diff --git a/src/nvim/api/window.c b/src/nvim/api/window.c
index 3f7c734cd1..8d17570077 100644
--- a/src/nvim/api/window.c
+++ b/src/nvim/api/window.c
@@ -118,8 +118,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;
diff --git a/src/nvim/move.c b/src/nvim/move.c
index df79b169b8..25d27d154b 100644
--- a/src/nvim/move.c
+++ b/src/nvim/move.c
@@ -341,15 +341,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.
diff --git a/test/functional/api/window_spec.lua b/test/functional/api/window_spec.lua
index 7c65cf9c37..48431ccfc7 100644
--- a/test/functional/api/window_spec.lua
+++ b/test/functional/api/window_spec.lua
@@ -229,6 +229,46 @@ 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')
+ screen:expect([[
+ aa{2:a} │aa{2:a} |
+ bb{2:b} │bb{2:b} |
+ cc{2:c} │cc{2:c} |
+ dd^d │ddd |
+ {1:~ }│{1:~ }|
+ {1:~ }│{1:~ }|
+ {3:[No Name] [+] }{4:[No Name] [+] }|
+ |
+ ]])
+ window('set_cursor', oldwin, {2, 0})
+ screen:expect([[
+ aa{2:a} │{2:a}aa |
+ bb{2:b} │bbb |
+ cc{2:c} │{2:c}cc |
+ dd^d │{2:d}dd |
+ {1:~ }│{1:~ }|
+ {1:~ }│{1:~ }|
+ {3:[No Name] [+] }{4:[No Name] [+] }|
+ |
+ ]])
+ end)
end)
describe('{get,set}_height', function()