diff options
Diffstat (limited to 'src/misc2.c')
-rw-r--r-- | src/misc2.c | 31 |
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) { |