aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/api/window.c5
-rw-r--r--src/nvim/move.c12
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.