aboutsummaryrefslogtreecommitdiff
path: root/src/nvim
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim')
-rw-r--r--src/nvim/api/buffer.c11
-rw-r--r--src/nvim/api/extmark.c4
-rw-r--r--src/nvim/api/window.c4
-rw-r--r--src/nvim/autocmd.c6
-rw-r--r--src/nvim/buffer.c8
-rw-r--r--src/nvim/change.c6
-rw-r--r--src/nvim/cursor.c87
-rw-r--r--src/nvim/decoration.c4
-rw-r--r--src/nvim/diff.c13
-rw-r--r--src/nvim/drawline.c6
-rw-r--r--src/nvim/drawscreen.c14
-rw-r--r--src/nvim/edit.c70
-rw-r--r--src/nvim/eval/buffer.c6
-rw-r--r--src/nvim/eval/funcs.c16
-rw-r--r--src/nvim/eval/window.c12
-rw-r--r--src/nvim/ex_cmds.c12
-rw-r--r--src/nvim/ex_cmds2.c2
-rw-r--r--src/nvim/ex_docmd.c54
-rw-r--r--src/nvim/ex_getln.c10
-rw-r--r--src/nvim/fileio.c2
-rw-r--r--src/nvim/fold.c34
-rw-r--r--src/nvim/getchar.c4
-rw-r--r--src/nvim/indent.c4
-rw-r--r--src/nvim/insexpand.c4
-rw-r--r--src/nvim/lua/executor.c2
-rw-r--r--src/nvim/mark.c2
-rw-r--r--src/nvim/match.c2
-rw-r--r--src/nvim/memline.c6
-rw-r--r--src/nvim/menu.c4
-rw-r--r--src/nvim/mouse.c12
-rw-r--r--src/nvim/move.c795
-rw-r--r--src/nvim/normal.c184
-rw-r--r--src/nvim/ops.c68
-rw-r--r--src/nvim/option.c10
-rw-r--r--src/nvim/optionstr.c5
-rw-r--r--src/nvim/plines.c8
-rw-r--r--src/nvim/popupmenu.c6
-rw-r--r--src/nvim/quickfix.c6
-rw-r--r--src/nvim/search.c10
-rw-r--r--src/nvim/state.c4
-rw-r--r--src/nvim/state.h1
-rw-r--r--src/nvim/tag.c6
-rw-r--r--src/nvim/terminal.c4
-rw-r--r--src/nvim/textformat.c12
-rw-r--r--src/nvim/textobject.c12
-rw-r--r--src/nvim/undo.c10
-rw-r--r--src/nvim/window.c14
47 files changed, 772 insertions, 804 deletions
diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c
index 035e36a2dd..42467d1562 100644
--- a/src/nvim/api/buffer.c
+++ b/src/nvim/api/buffer.c
@@ -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);
}
diff --git a/src/nvim/api/extmark.c b/src/nvim/api/extmark.c
index a21cf5b337..b5f56d270c 100644
--- a/src/nvim/api/extmark.c
+++ b/src/nvim/api/extmark.c
@@ -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;
}
diff --git a/src/nvim/api/window.c b/src/nvim/api/window.c
index 1a80e9ea16..026d09d9a9 100644
--- a/src/nvim/api/window.c
+++ b/src/nvim/api/window.c
@@ -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);
diff --git a/src/nvim/autocmd.c b/src/nvim/autocmd.c
index 652b6ba74e..285ef538b9 100644
--- a/src/nvim/autocmd.c
+++ b/src/nvim/autocmd.c
@@ -1432,7 +1432,7 @@ win_found:
// the buffer contents may have changed
VIsual_active = aco->save_VIsual_active;
- check_cursor();
+ check_cursor(curwin);
if (curwin->w_topline > curbuf->b_ml.ml_line_count) {
curwin->w_topline = curbuf->b_ml.ml_line_count;
curwin->w_topfill = 0;
@@ -1464,12 +1464,12 @@ win_found:
// In case the autocommand moves the cursor to a position that does not
// exist in curbuf
VIsual_active = aco->save_VIsual_active;
- check_cursor();
+ check_cursor(curwin);
}
}
VIsual_active = aco->save_VIsual_active;
- check_cursor(); // just in case lines got deleted
+ check_cursor(curwin); // just in case lines got deleted
if (VIsual_active) {
check_pos(curbuf, &VIsual);
}
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c
index e141706edd..3c2d52e6ad 100644
--- a/src/nvim/buffer.c
+++ b/src/nvim/buffer.c
@@ -1752,7 +1752,7 @@ void enter_buffer(buf_T *buf)
maketitle();
// when autocmds didn't change it
if (curwin->w_topline == 1 && !curwin->w_topline_was_set) {
- scroll_cursor_halfway(false, false); // redisplay at correct position
+ scroll_cursor_halfway(curwin, false, false); // redisplay at correct position
}
// Change directories when the 'acd' option is set.
@@ -2172,7 +2172,7 @@ int buflist_getfile(int n, linenr_T lnum, int options, int forceit)
// cursor is at to BOL and w_cursor.lnum is checked due to getfile()
if (!p_sol && col != 0) {
curwin->w_cursor.col = col;
- check_cursor_col();
+ check_cursor_col(curwin);
curwin->w_cursor.coladd = 0;
curwin->w_set_curswant = true;
}
@@ -2197,7 +2197,7 @@ void buflist_getfpos(void)
curwin->w_cursor.col = 0;
} else {
curwin->w_cursor.col = fpos->col;
- check_cursor_col();
+ check_cursor_col(curwin);
curwin->w_cursor.coladd = 0;
curwin->w_set_curswant = true;
}
@@ -3257,7 +3257,7 @@ void fileinfo(int fullname, int shorthelp, bool dont_truncate)
(int64_t)curwin->w_cursor.lnum,
(int64_t)curbuf->b_ml.ml_line_count,
n);
- validate_virtcol();
+ validate_virtcol(curwin);
size_t len = strlen(buffer);
col_print(buffer + len, IOSIZE - len,
(int)curwin->w_cursor.col + 1, (int)curwin->w_virtcol + 1);
diff --git a/src/nvim/change.c b/src/nvim/change.c
index 8b1e7587de..673907fa27 100644
--- a/src/nvim/change.c
+++ b/src/nvim/change.c
@@ -707,7 +707,7 @@ void ins_char(int c)
void ins_char_bytes(char *buf, size_t charlen)
{
// Break tabs if needed.
- if (virtual_active() && curwin->w_cursor.coladd > 0) {
+ if (virtual_active(curwin) && curwin->w_cursor.coladd > 0) {
coladvance_force(getviscol());
}
@@ -815,7 +815,7 @@ void ins_str(char *s)
int newlen = (int)strlen(s);
linenr_T lnum = curwin->w_cursor.lnum;
- if (virtual_active() && curwin->w_cursor.coladd > 0) {
+ if (virtual_active(curwin) && curwin->w_cursor.coladd > 0) {
coladvance_force(getviscol());
}
@@ -918,7 +918,7 @@ int del_bytes(colnr_T count, bool fixpos_arg, bool use_delcombine)
// fixpos is true, we don't want to end up positioned at the NUL,
// unless "restart_edit" is set or 'virtualedit' contains "onemore".
if (col > 0 && fixpos && restart_edit == 0
- && (get_ve_flags() & VE_ONEMORE) == 0) {
+ && (get_ve_flags(curwin) & VE_ONEMORE) == 0) {
curwin->w_cursor.col--;
curwin->w_cursor.coladd = 0;
curwin->w_cursor.col -= utf_head_off(oldp, oldp + curwin->w_cursor.col);
diff --git a/src/nvim/cursor.c b/src/nvim/cursor.c
index ab99d1b854..c3f5a36500 100644
--- a/src/nvim/cursor.c
+++ b/src/nvim/cursor.c
@@ -57,7 +57,7 @@ int getviscol2(colnr_T col, colnr_T coladd)
/// The caller must have saved the cursor line for undo!
int coladvance_force(colnr_T wcol)
{
- int rc = coladvance2(&curwin->w_cursor, true, false, wcol);
+ int rc = coladvance2(curwin, &curwin->w_cursor, true, false, wcol);
if (wcol == MAXCOL) {
curwin->w_valid &= ~VALID_VIRTCOL;
@@ -76,25 +76,26 @@ int coladvance_force(colnr_T wcol)
/// beginning at coladd 0.
///
/// @return OK if desired column is reached, FAIL if not
-int coladvance(colnr_T wcol)
+int coladvance(win_T *wp, colnr_T wcol)
{
- int rc = getvpos(&curwin->w_cursor, wcol);
+ int rc = getvpos(wp, &wp->w_cursor, wcol);
if (wcol == MAXCOL || rc == FAIL) {
- curwin->w_valid &= ~VALID_VIRTCOL;
- } else if (*get_cursor_pos_ptr() != TAB) {
+ wp->w_valid &= ~VALID_VIRTCOL;
+ } else if (*(ml_get_buf(wp->w_buffer, wp->w_cursor.lnum) + wp->w_cursor.col) != TAB) {
// Virtcol is valid when not on a TAB
- curwin->w_valid |= VALID_VIRTCOL;
- curwin->w_virtcol = wcol;
+ wp->w_valid |= VALID_VIRTCOL;
+ wp->w_virtcol = wcol;
}
return rc;
}
-/// @param addspaces change the text to achieve our goal?
+/// @param addspaces change the text to achieve our goal? only for wp=curwin!
/// @param finetune change char offset for the exact column
/// @param wcol_arg column to move to (can be negative)
-static int coladvance2(pos_T *pos, bool addspaces, bool finetune, colnr_T wcol_arg)
+static int coladvance2(win_T *wp, pos_T *pos, bool addspaces, bool finetune, colnr_T wcol_arg)
{
+ assert(wp == curwin || !addspaces);
colnr_T wcol = wcol_arg;
int idx;
colnr_T col = 0;
@@ -104,30 +105,30 @@ static int coladvance2(pos_T *pos, bool addspaces, bool finetune, colnr_T wcol_a
|| (State & MODE_TERMINAL)
|| restart_edit != NUL
|| (VIsual_active && *p_sel != 'o')
- || ((get_ve_flags() & VE_ONEMORE) && wcol < MAXCOL);
+ || ((get_ve_flags(wp) & VE_ONEMORE) && wcol < MAXCOL);
- char *line = ml_get_buf(curbuf, pos->lnum);
+ char *line = ml_get_buf(wp->w_buffer, pos->lnum);
if (wcol >= MAXCOL) {
idx = (int)strlen(line) - 1 + one_more;
col = wcol;
if ((addspaces || finetune) && !VIsual_active) {
- curwin->w_curswant = linetabsize(curwin, pos->lnum) + one_more;
- if (curwin->w_curswant > 0) {
- curwin->w_curswant--;
+ wp->w_curswant = linetabsize(wp, pos->lnum) + one_more;
+ if (wp->w_curswant > 0) {
+ wp->w_curswant--;
}
}
} else {
- int width = curwin->w_width_inner - win_col_off(curwin);
+ int width = wp->w_width_inner - win_col_off(wp);
int csize = 0;
if (finetune
- && curwin->w_p_wrap
- && curwin->w_width_inner != 0
+ && wp->w_p_wrap
+ && wp->w_width_inner != 0
&& wcol >= (colnr_T)width
&& width > 0) {
- csize = linetabsize(curwin, pos->lnum);
+ csize = linetabsize(wp, pos->lnum);
if (csize > 0) {
csize--;
}
@@ -143,7 +144,7 @@ static int coladvance2(pos_T *pos, bool addspaces, bool finetune, colnr_T wcol_a
}
CharsizeArg csarg;
- CSType cstype = init_charsize_arg(&csarg, curwin, pos->lnum, line);
+ CSType cstype = init_charsize_arg(&csarg, wp, pos->lnum, line);
StrCharInfo ci = utf_ptr2StrCharInfo(line);
col = 0;
while (col <= wcol && *ci.ptr != NUL) {
@@ -159,14 +160,14 @@ static int coladvance2(pos_T *pos, bool addspaces, bool finetune, colnr_T wcol_a
// is needed to ensure that a virtual position off the end of
// a line has the correct indexing. The one_more comparison
// replaces an explicit add of one_more later on.
- if (col > wcol || (!virtual_active() && one_more == 0)) {
+ if (col > wcol || (!virtual_active(wp) && one_more == 0)) {
idx -= 1;
// Don't count the chars from 'showbreak'.
csize -= head;
col -= csize;
}
- if (virtual_active()
+ if (virtual_active(wp)
&& addspaces
&& wcol >= 0
&& ((col != wcol && col != wcol + 1) || csize > 1)) {
@@ -229,14 +230,14 @@ static int coladvance2(pos_T *pos, bool addspaces, bool finetune, colnr_T wcol_a
if (!one_more) {
colnr_T scol, ecol;
- getvcol(curwin, pos, &scol, NULL, &ecol);
+ getvcol(wp, pos, &scol, NULL, &ecol);
pos->coladd = ecol - scol;
}
} else {
int b = (int)wcol - (int)col;
// The difference between wcol and col is used to set coladd.
- if (b > 0 && b < (MAXCOL - 2 * curwin->w_width_inner)) {
+ if (b > 0 && b < (MAXCOL - 2 * wp->w_width_inner)) {
pos->coladd = b;
}
@@ -245,7 +246,7 @@ static int coladvance2(pos_T *pos, bool addspaces, bool finetune, colnr_T wcol_a
}
// Prevent from moving onto a trail byte.
- mark_mb_adjustpos(curbuf, pos);
+ mark_mb_adjustpos(wp->w_buffer, pos);
if (wcol < 0 || col < wcol) {
return FAIL;
@@ -256,9 +257,9 @@ static int coladvance2(pos_T *pos, bool addspaces, bool finetune, colnr_T wcol_a
/// Return in "pos" the position of the cursor advanced to screen column "wcol".
///
/// @return OK if desired column is reached, FAIL if not
-int getvpos(pos_T *pos, colnr_T wcol)
+int getvpos(win_T *wp, pos_T *pos, colnr_T wcol)
{
- return coladvance2(pos, false, virtual_active(), wcol);
+ return coladvance2(wp, pos, false, virtual_active(wp), wcol);
}
/// Increment the cursor position. See inc() for return values.
@@ -294,7 +295,7 @@ linenr_T get_cursor_rel_lnum(win_T *wp, linenr_T lnum)
// Loop until we reach to_line, skipping folds.
for (; from_line < to_line; from_line++, retval++) {
// If from_line is in a fold, set it to the last line of that fold.
- hasFoldingWin(wp, from_line, NULL, &from_line, true, NULL);
+ hasFolding(wp, from_line, NULL, &from_line);
}
// If to_line is in a closed fold, the line count is off by +1. Correct it.
@@ -329,7 +330,7 @@ void check_cursor_lnum(win_T *win)
if (win->w_cursor.lnum > buf->b_ml.ml_line_count) {
// If there is a closed fold at the end of the file, put the cursor in
// its first line. Otherwise in the last line.
- if (!hasFolding(buf->b_ml.ml_line_count, &win->w_cursor.lnum, NULL)) {
+ if (!hasFolding(win, buf->b_ml.ml_line_count, &win->w_cursor.lnum, NULL)) {
win->w_cursor.lnum = buf->b_ml.ml_line_count;
}
}
@@ -338,19 +339,13 @@ void check_cursor_lnum(win_T *win)
}
}
-/// Make sure curwin->w_cursor.col is valid.
-void check_cursor_col(void)
-{
- check_cursor_col_win(curwin);
-}
-
/// Make sure win->w_cursor.col is valid. Special handling of insert-mode.
/// @see mb_check_adjust_col
-void check_cursor_col_win(win_T *win)
+void check_cursor_col(win_T *win)
{
colnr_T oldcol = win->w_cursor.col;
colnr_T oldcoladd = win->w_cursor.col + win->w_cursor.coladd;
- unsigned cur_ve_flags = get_ve_flags();
+ unsigned cur_ve_flags = get_ve_flags(win);
colnr_T len = (colnr_T)strlen(ml_get_buf(win->w_buffer, win->w_cursor.lnum));
if (len == 0) {
@@ -363,7 +358,7 @@ void check_cursor_col_win(win_T *win)
if ((State & MODE_INSERT) || restart_edit
|| (VIsual_active && *p_sel != 'o')
|| (cur_ve_flags & VE_ONEMORE)
- || virtual_active()) {
+ || virtual_active(win)) {
win->w_cursor.col = len;
} else {
win->w_cursor.col = len - 1;
@@ -403,10 +398,10 @@ void check_cursor_col_win(win_T *win)
}
/// Make sure curwin->w_cursor in on a valid character
-void check_cursor(void)
+void check_cursor(win_T *wp)
{
- check_cursor_lnum(curwin);
- check_cursor_col();
+ check_cursor_lnum(wp);
+ check_cursor_col(wp);
}
/// Check if VIsual position is valid, correct it if not.
@@ -453,8 +448,8 @@ bool set_leftcol(colnr_T leftcol)
changed_cline_bef_curs(curwin);
// TODO(hinidu): I think it should be colnr_T or int, but p_siso is long.
// Perhaps we can change p_siso to int.
- int64_t lastcol = curwin->w_leftcol + curwin->w_width_inner - curwin_col_off() - 1;
- validate_virtcol();
+ int64_t lastcol = curwin->w_leftcol + curwin->w_width_inner - win_col_off(curwin) - 1;
+ validate_virtcol(curwin);
bool retval = false;
// If the cursor is right or left of the screen, move it to last or first
@@ -462,10 +457,10 @@ bool set_leftcol(colnr_T leftcol)
int siso = get_sidescrolloff_value(curwin);
if (curwin->w_virtcol > (colnr_T)(lastcol - siso)) {
retval = true;
- coladvance((colnr_T)(lastcol - siso));
+ coladvance(curwin, (colnr_T)(lastcol - siso));
} else if (curwin->w_virtcol < curwin->w_leftcol + siso) {
retval = true;
- coladvance((colnr_T)(curwin->w_leftcol + siso));
+ coladvance(curwin, (colnr_T)(curwin->w_leftcol + siso));
}
// If the start of the character under the cursor is not on the screen,
@@ -475,10 +470,10 @@ bool set_leftcol(colnr_T leftcol)
getvvcol(curwin, &curwin->w_cursor, &s, NULL, &e);
if (e > (colnr_T)lastcol) {
retval = true;
- coladvance(s - 1);
+ coladvance(curwin, s - 1);
} else if (s < curwin->w_leftcol) {
retval = true;
- if (coladvance(e + 1) == FAIL) { // there isn't another character
+ if (coladvance(curwin, e + 1) == FAIL) { // there isn't another character
curwin->w_leftcol = s; // adjust w_leftcol instead
changed_cline_bef_curs(curwin);
}
diff --git a/src/nvim/decoration.c b/src/nvim/decoration.c
index 51d5d08f78..41ef1aceaf 100644
--- a/src/nvim/decoration.c
+++ b/src/nvim/decoration.c
@@ -890,9 +890,9 @@ int decor_virt_lines(win_T *wp, linenr_T lnum, VirtLines *lines, TriState has_fo
}
assert(lnum > 0);
- bool below_fold = lnum > 1 && hasFoldingWin(wp, lnum - 1, NULL, NULL, true, NULL);
+ bool below_fold = lnum > 1 && hasFolding(wp, lnum - 1, NULL, NULL);
if (has_fold == kNone) {
- has_fold = hasFoldingWin(wp, lnum, NULL, NULL, true, NULL);
+ has_fold = hasFolding(wp, lnum, NULL, NULL);
}
const int row = lnum - 1;
diff --git a/src/nvim/diff.c b/src/nvim/diff.c
index 2b3010e063..bc91c1e4c2 100644
--- a/src/nvim/diff.c
+++ b/src/nvim/diff.c
@@ -1347,7 +1347,7 @@ void ex_diffsplit(exarg_T *eap)
set_bufref(&old_curbuf, curbuf);
// Need to compute w_fraction when no redraw happened yet.
- validate_cursor();
+ validate_cursor(curwin);
set_fraction(curwin);
// don't use a new tab page, each tab page has its own diffs
@@ -1457,7 +1457,7 @@ void diff_win_options(win_T *wp, bool addbuf)
foldUpdateAll(wp);
// make sure topline is not halfway through a fold
- changed_window_setting_win(wp);
+ changed_window_setting(wp);
if (vim_strchr(p_sbo, 'h') == NULL) {
do_cmdline_cmd("set sbo+=hor");
}
@@ -1522,7 +1522,7 @@ void ex_diffoff(exarg_T *eap)
// make sure topline is not halfway a fold and cursor is
// invalidated
- changed_window_setting_win(wp);
+ changed_window_setting(wp);
// Note: 'sbo' is not restored, it's a global option.
diff_buf_adjust(wp);
@@ -2137,7 +2137,7 @@ int diff_check_with_linestatus(win_T *wp, linenr_T lnum, int *linestatus)
}
// A closed fold never has filler lines.
- if (hasFoldingWin(wp, lnum, NULL, NULL, true, NULL)) {
+ if (hasFolding(wp, lnum, NULL, NULL)) {
return 0;
}
@@ -2451,8 +2451,7 @@ void diff_set_topline(win_T *fromwin, win_T *towin)
changed_line_abv_curs_win(towin);
check_topfill(towin, false);
- hasFoldingWin(towin, towin->w_topline, &towin->w_topline,
- NULL, true, NULL);
+ hasFolding(towin, towin->w_topline, &towin->w_topline, NULL);
}
/// This is called when 'diffopt' is changed.
@@ -2988,7 +2987,7 @@ theend:
// Check that the cursor is on a valid character and update its
// position. When there were filler lines the topline has become
// invalid.
- check_cursor();
+ check_cursor(curwin);
changed_line_abv_curs();
if (diff_need_update) {
diff --git a/src/nvim/drawline.c b/src/nvim/drawline.c
index c5f6ce2e36..a7b1d561b6 100644
--- a/src/nvim/drawline.c
+++ b/src/nvim/drawline.c
@@ -1393,7 +1393,7 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, s
// the end of the line may be before the start of the displayed part.
if (wlv.vcol < start_col && (wp->w_p_cuc
|| wlv.color_cols
- || virtual_active()
+ || virtual_active(wp)
|| (VIsual_active && wp->w_buffer == curwin->w_buffer))) {
wlv.vcol = start_col;
}
@@ -2339,7 +2339,7 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, s
&& wlv.line_attr == 0
&& wlv.line_attr_lowprio == 0) {
// In virtualedit, visual selections may extend beyond end of line
- if (!(area_highlighting && virtual_active()
+ if (!(area_highlighting && virtual_active(wp)
&& wlv.tocol != MAXCOL && wlv.vcol < wlv.tocol)) {
wlv.p_extra = "";
}
@@ -2382,7 +2382,7 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, s
mb_schar = schar_from_ascii(mb_c);
} else if (VIsual_active
&& (VIsual_mode == Ctrl_V || VIsual_mode == 'v')
- && virtual_active()
+ && virtual_active(wp)
&& wlv.tocol != MAXCOL
&& wlv.vcol < wlv.tocol
&& wlv.col < grid->cols) {
diff --git a/src/nvim/drawscreen.c b/src/nvim/drawscreen.c
index 402f7fa428..f2ad4ca77e 100644
--- a/src/nvim/drawscreen.c
+++ b/src/nvim/drawscreen.c
@@ -823,7 +823,7 @@ void setcursor(void)
void setcursor_mayforce(bool force)
{
if (force || redrawing()) {
- validate_cursor();
+ validate_cursor(curwin);
ScreenGrid *grid = &curwin->w_grid;
int row = curwin->w_wrow;
@@ -851,7 +851,7 @@ void show_cursor_info_later(bool force)
&& *ml_get_buf(curwin->w_buffer, curwin->w_cursor.lnum) == NUL;
// Only draw when something changed.
- validate_virtcol_win(curwin);
+ validate_virtcol(curwin);
if (force
|| curwin->w_cursor.lnum != curwin->w_stl_cursor.lnum
|| curwin->w_cursor.col != curwin->w_stl_cursor.col
@@ -1611,14 +1611,14 @@ static void win_update(win_T *wp)
}
}
- hasFoldingWin(wp, mod_top, &mod_top, NULL, true, NULL);
+ hasFolding(wp, mod_top, &mod_top, NULL);
if (mod_top > lnumt) {
mod_top = lnumt;
}
// Now do the same for the bottom line (one above mod_bot).
mod_bot--;
- hasFoldingWin(wp, mod_bot, NULL, &mod_bot, true, NULL);
+ hasFolding(wp, mod_bot, NULL, &mod_bot);
mod_bot++;
if (mod_bot < lnumb) {
mod_bot = lnumb;
@@ -1691,7 +1691,7 @@ static void win_update(win_T *wp)
if (j >= wp->w_grid.rows - 2) {
break;
}
- hasFoldingWin(wp, ln, NULL, &ln, true, NULL);
+ hasFolding(wp, ln, NULL, &ln);
}
} else {
j = wp->w_lines[0].wl_lnum - wp->w_topline;
@@ -1903,7 +1903,7 @@ static void win_update(win_T *wp)
// Highlight to the end of the line, unless 'virtualedit' has
// "block".
if (curwin->w_curswant == MAXCOL) {
- if (get_ve_flags() & VE_BLOCK) {
+ if (get_ve_flags(curwin) & VE_BLOCK) {
pos_T pos;
int cursor_above = curwin->w_cursor.lnum < VIsual.lnum;
@@ -2148,7 +2148,7 @@ static void win_update(win_T *wp)
// rows, and may insert/delete lines
int j = idx;
for (l = lnum; l < mod_bot; l++) {
- if (hasFoldingWin(wp, l, NULL, &l, true, NULL)) {
+ if (hasFolding(wp, l, NULL, &l)) {
new_rows++;
} else if (l == wp->w_topline) {
int n = plines_win_nofill(wp, l, false) + wp->w_topfill;
diff --git a/src/nvim/edit.c b/src/nvim/edit.c
index a0d6f7125e..5b62ab4215 100644
--- a/src/nvim/edit.c
+++ b/src/nvim/edit.c
@@ -185,7 +185,7 @@ static void insert_enter(InsertState *s)
curwin->w_cursor = save_cursor;
State = MODE_INSERT;
- check_cursor_col();
+ check_cursor_col(curwin);
State = save_state;
}
}
@@ -282,7 +282,7 @@ static void insert_enter(InsertState *s)
// correct in very rare cases).
// Also do this if curswant is greater than the current virtual
// column. Eg after "^O$" or "^O80|".
- validate_virtcol();
+ validate_virtcol(curwin);
update_curswant();
if (((ins_at_eol && curwin->w_cursor.lnum == o_lnum)
|| curwin->w_curswant > curwin->w_virtcol)
@@ -468,7 +468,7 @@ static int insert_check(VimState *state)
&& curwin->w_topline == s->old_topline
&& curwin->w_topfill == s->old_topfill) {
s->mincol = curwin->w_wcol;
- validate_cursor_col();
+ validate_cursor_col(curwin);
if (curwin->w_wcol < s->mincol - tabstop_at(get_nolist_virtcol(),
curbuf->b_p_ts,
@@ -478,7 +478,7 @@ static int insert_check(VimState *state)
|| curwin->w_topfill > 0)) {
if (curwin->w_topfill > 0) {
curwin->w_topfill--;
- } else if (hasFolding(curwin->w_topline, NULL, &s->old_topline)) {
+ } else if (hasFolding(curwin, curwin->w_topline, NULL, &s->old_topline)) {
set_topline(curwin, s->old_topline + 1);
} else {
set_topline(curwin, curwin-&g