diff options
-rw-r--r-- | src/nvim/api/window.c | 5 | ||||
-rw-r--r-- | src/nvim/move.c | 12 |
2 files changed, 17 insertions, 0 deletions
diff --git a/src/nvim/api/window.c b/src/nvim/api/window.c index fde1ebfa4c..597c857ad5 100644 --- a/src/nvim/api/window.c +++ b/src/nvim/api/window.c @@ -9,6 +9,7 @@ #include "nvim/cursor.h" #include "nvim/window.h" #include "nvim/screen.h" +#include "nvim/move.h" #include "nvim/misc2.h" @@ -86,6 +87,10 @@ void window_set_cursor(Window window, ArrayOf(Integer, 2) pos, Error *err) win->w_cursor.coladd = 0; // When column is out of range silently correct it. check_cursor_col_win(win); + + // make sure cursor is in visible range even if win != curwin + update_topline_win(win); + update_screen(VALID); } diff --git a/src/nvim/move.c b/src/nvim/move.c index 2118f58f7e..c43fa1d09d 100644 --- a/src/nvim/move.c +++ b/src/nvim/move.c @@ -34,6 +34,7 @@ #include "nvim/popupmnu.h" #include "nvim/screen.h" #include "nvim/strings.h" +#include "nvim/window.h" typedef struct { linenr_T lnum; /* line number */ @@ -315,6 +316,17 @@ void update_topline(void) } /* + * Update win->w_topline to move the cursor onto the screen. + */ +void update_topline_win(win_T* win) +{ + win_T *save_curwin; + switch_win(&save_curwin, NULL, win, NULL, true); + update_topline(); + restore_win(save_curwin, NULL, 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. |