summaryrefslogtreecommitdiff
path: root/src/misc2.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/misc2.c')
-rw-r--r--src/misc2.c31
1 files changed, 16 insertions, 15 deletions
diff --git a/src/misc2.c b/src/misc2.c
index d16fb46b6..30674142c 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -673,25 +673,27 @@ adjust_cursor_col(void)
}
/*
- * When curwin->w_leftcol has changed, adjust the cursor position.
+ * Set "curwin->w_leftcol" to "leftcol".
+ * Adjust the cursor position if needed.
* Return TRUE if the cursor was moved.
*/
int
-leftcol_changed(void)
+set_leftcol(colnr_T leftcol)
{
- long lastcol;
- colnr_T s, e;
int retval = FALSE;
- long siso = get_sidescrolloff_value();
+
+ // Return quickly when there is no change.
+ if (curwin->w_leftcol == leftcol)
+ return FALSE;
+ curwin->w_leftcol = leftcol;
changed_cline_bef_curs();
- lastcol = curwin->w_leftcol + curwin->w_width - curwin_col_off() - 1;
+ long lastcol = curwin->w_leftcol + curwin->w_width - curwin_col_off() - 1;
validate_virtcol();
- /*
- * If the cursor is right or left of the screen, move it to last or first
- * character.
- */
+ // If the cursor is right or left of the screen, move it to last or first
+ // visible character.
+ long siso = get_sidescrolloff_value();
if (curwin->w_virtcol > (colnr_T)(lastcol - siso))
{
retval = TRUE;
@@ -703,11 +705,10 @@ leftcol_changed(void)
(void)coladvance((colnr_T)(curwin->w_leftcol + siso));
}
- /*
- * If the start of the character under the cursor is not on the screen,
- * advance the cursor one more char. If this fails (last char of the
- * line) adjust the scrolling.
- */
+ // If the start of the character under the cursor is not on the screen,
+ // advance the cursor one more char. If this fails (last char of the
+ // line) adjust the scrolling.
+ colnr_T s, e;
getvvcol(curwin, &curwin->w_cursor, &s, NULL, &e);
if (e > (colnr_T)lastcol)
{