Merge pull request #951 from bfredl/curfix

api: window_set_cursor doesn't always update position.
This commit is contained in:
Justin M. Keyes
2014-11-01 21:24:58 -04:00
3 changed files with 84 additions and 2 deletions

View File

@@ -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);
}

View File

@@ -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 */
@@ -314,6 +315,17 @@ void update_topline(void)
p_so = save_so;
}
/*
* 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.