diff options
author | Rom Grk <romgrk.cc@gmail.com> | 2020-10-25 02:25:22 -0400 |
---|---|---|
committer | Rom Grk <romgrk.cc@gmail.com> | 2020-10-25 02:25:22 -0400 |
commit | d2a38dab8085ddb973393ca7f077ff65d64f60ef (patch) | |
tree | 3909abba0a647adf00db9b2e3b951f126bda9750 | |
parent | a1596f0b0bb7e2a84e062a27fabe618d085a2947 (diff) | |
download | rneovim-d2a38dab8085ddb973393ca7f077ff65d64f60ef.tar.gz rneovim-d2a38dab8085ddb973393ca7f077ff65d64f60ef.tar.bz2 rneovim-d2a38dab8085ddb973393ca7f077ff65d64f60ef.zip |
move.c: dont invalidate viewport when no scroll happened
-rw-r--r-- | src/nvim/move.c | 14 | ||||
-rw-r--r-- | src/nvim/normal.c | 10 |
2 files changed, 18 insertions, 6 deletions
diff --git a/src/nvim/move.c b/src/nvim/move.c index e2a304efa5..8084461d3a 100644 --- a/src/nvim/move.c +++ b/src/nvim/move.c @@ -1020,7 +1020,7 @@ void textpos2screenpos(win_T *wp, pos_T *pos, int *rowp, int *scolp, /* * Scroll the current window down by "line_count" logical lines. "CTRL-Y" */ -void +bool scrolldown ( long line_count, int byfold /* true: count a closed fold as one line */ @@ -1095,17 +1095,21 @@ scrolldown ( foldAdjustCursor(); coladvance(curwin->w_curswant); } + return moved; } /* * Scroll the current window up by "line_count" logical lines. "CTRL-E" */ -void +bool scrollup ( long line_count, int byfold /* true: count a closed fold as one line */ ) { + linenr_T topline = curwin->w_topline; + linenr_T botline = curwin->w_botline; + if ((byfold && hasAnyFolding(curwin)) || curwin->w_p_diff) { // count each sequence of folded lines as one logical line @@ -1148,6 +1152,12 @@ scrollup ( ~(VALID_WROW|VALID_WCOL|VALID_CHEIGHT|VALID_CROW|VALID_VIRTCOL); coladvance(curwin->w_curswant); } + + bool moved = + topline != curwin->w_topline || + botline != curwin->w_botline; + + return moved; } /* diff --git a/src/nvim/normal.c b/src/nvim/normal.c index 2e49108028..f6add44f6a 100644 --- a/src/nvim/normal.c +++ b/src/nvim/normal.c @@ -4117,10 +4117,10 @@ void scroll_redraw(int up, long count) int prev_topfill = curwin->w_topfill; linenr_T prev_lnum = curwin->w_cursor.lnum; - if (up) - scrollup(count, true); - else + bool moved = up ? + scrollup(count, true) : scrolldown(count, true); + if (get_scrolloff_value()) { // Adjust the cursor position for 'scrolloff'. Mark w_topline as // valid, otherwise the screen jumps back at the end of the file. @@ -4152,7 +4152,9 @@ void scroll_redraw(int up, long count) } if (curwin->w_cursor.lnum != prev_lnum) coladvance(curwin->w_curswant); - curwin->w_viewport_invalid = true; + // XXX: can `moved` be used to prevent other work here? + if (moved) + curwin->w_viewport_invalid = true; redraw_later(VALID); } |