mirror of
https://github.com/neovim/neovim.git
synced 2025-10-17 07:16:09 +00:00
fix(api/buffer): fix handling of viewport of non-current buffer
A lot of functions in move.c only worked for curwin, alternatively took a `wp` arg but still only work if that happens to be curwin. Refactor those that are needed for update_topline(wp) to work for any window. fixes #27723 fixes #27720
This commit is contained in:
@@ -1269,10 +1269,13 @@ static void fix_cursor(win_T *win, linenr_T lo, linenr_T hi, linenr_T extra)
|
||||
} else if (extra < 0) {
|
||||
check_cursor_lnum(win);
|
||||
}
|
||||
check_cursor_col_win(win);
|
||||
check_cursor_col(win);
|
||||
changed_cline_bef_curs(win);
|
||||
win->w_valid &= ~(VALID_BOTLINE_AP);
|
||||
update_topline(win);
|
||||
} else {
|
||||
invalidate_botline(win);
|
||||
}
|
||||
invalidate_botline(win);
|
||||
}
|
||||
|
||||
/// Fix cursor position after replacing text
|
||||
@@ -1307,7 +1310,7 @@ static void fix_cursor_cols(win_T *win, linenr_T start_row, colnr_T start_col, l
|
||||
|
||||
// it's easier to work with a single value here.
|
||||
// col and coladd are fixed by a later call
|
||||
// to check_cursor_col_win when necessary
|
||||
// to check_cursor_col when necessary
|
||||
win->w_cursor.col += win->w_cursor.coladd;
|
||||
win->w_cursor.coladd = 0;
|
||||
|
||||
@@ -1343,7 +1346,7 @@ static void fix_cursor_cols(win_T *win, linenr_T start_row, colnr_T start_col, l
|
||||
}
|
||||
}
|
||||
|
||||
check_cursor_col_win(win);
|
||||
check_cursor_col(win);
|
||||
changed_cline_bef_curs(win);
|
||||
invalidate_botline(win);
|
||||
}
|
||||
|
@@ -1246,7 +1246,7 @@ Boolean nvim_win_add_ns(Window window, Integer ns_id, Error *err)
|
||||
|
||||
set_put(uint32_t, &win->w_ns_set, (uint32_t)ns_id);
|
||||
|
||||
changed_window_setting_win(win);
|
||||
changed_window_setting(win);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1291,7 +1291,7 @@ Boolean nvim_win_remove_ns(Window window, Integer ns_id, Error *err)
|
||||
|
||||
set_del(uint32_t, &win->w_ns_set, (uint32_t)ns_id);
|
||||
|
||||
changed_window_setting_win(win);
|
||||
changed_window_setting(win);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@@ -138,7 +138,7 @@ void nvim_win_set_cursor(Window window, ArrayOf(Integer, 2) pos, Error *err)
|
||||
win->w_cursor.col = (colnr_T)col;
|
||||
win->w_cursor.coladd = 0;
|
||||
// When column is out of range silently correct it.
|
||||
check_cursor_col_win(win);
|
||||
check_cursor_col(win);
|
||||
|
||||
// Make sure we stick in this column.
|
||||
win->w_set_curswant = true;
|
||||
@@ -148,7 +148,7 @@ void nvim_win_set_cursor(Window window, ArrayOf(Integer, 2) pos, Error *err)
|
||||
switchwin_T switchwin;
|
||||
switch_win(&switchwin, win, NULL, true);
|
||||
update_topline(curwin);
|
||||
validate_cursor();
|
||||
validate_cursor(curwin);
|
||||
restore_win(&switchwin, true);
|
||||
|
||||
redraw_later(win, UPD_VALID);
|
||||
|
Reference in New Issue
Block a user