diff options
author | lonerover <pathfinder1644@yahoo.com> | 2017-02-07 15:48:01 +0800 |
---|---|---|
committer | lonerover <pathfinder1644@yahoo.com> | 2017-02-09 08:24:43 +0800 |
commit | 67eae935575b85719f3292d428d9d5387e0d7fb8 (patch) | |
tree | 492e21afe1324f6c3ba65991b4f338d573043373 /src | |
parent | 7629176fb11be234882c64e3bf92d97839301fe4 (diff) | |
download | rneovim-67eae935575b85719f3292d428d9d5387e0d7fb8.tar.gz rneovim-67eae935575b85719f3292d428d9d5387e0d7fb8.tar.bz2 rneovim-67eae935575b85719f3292d428d9d5387e0d7fb8.zip |
vim-patch:7.4.2279
Problem: Starting diff mode with the cursor in the last line might end up
only showing one closed fold. (John Beckett)
Solution: Scroll the window to show the same relative cursor position.
https://github.com/vim/vim/commit/46328f9a1cc8047d1e05095bc9f531038c5a4028
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/diff.c | 7 | ||||
-rw-r--r-- | src/nvim/version.c | 2 | ||||
-rw-r--r-- | src/nvim/window.c | 11 |
3 files changed, 17 insertions, 3 deletions
diff --git a/src/nvim/diff.c b/src/nvim/diff.c index 9cb0789400..5940dc55da 100644 --- a/src/nvim/diff.c +++ b/src/nvim/diff.c @@ -1007,6 +1007,10 @@ void ex_diffsplit(exarg_T *eap) bufref_T old_curbuf; set_bufref(&old_curbuf, curbuf); + // Need to compute w_fraction when no redraw happened yet. + validate_cursor(); + set_fraction(curwin); + // don't use a new tab page, each tab page has its own diffs cmdmod.tab = 0; @@ -1032,6 +1036,9 @@ void ex_diffsplit(exarg_T *eap) curwin->w_cursor.lnum); } } + // Now that lines are folded scroll to show the cursor at the same + // relative position. + scroll_to_fraction(curwin, curwin->w_height); } } } diff --git a/src/nvim/version.c b/src/nvim/version.c index befcc918cc..ee2288e1b0 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -161,7 +161,7 @@ static int included_patches[] = { // 2282 NA // 2281 NA // 2280, - // 2279, + 2279, // 2278 NA 2277, // 2276, diff --git a/src/nvim/window.c b/src/nvim/window.c index 510f182353..28269e8889 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -4717,8 +4717,6 @@ void set_fraction(win_T *wp) */ void win_new_height(win_T *wp, int height) { - linenr_T lnum; - int sline, line_size; int prev_height = wp->w_height; /* Don't want a negative height. Happens when splitting a tiny window. @@ -4745,6 +4743,15 @@ void win_new_height(win_T *wp, int height) wp->w_height = height; wp->w_skipcol = 0; + scroll_to_fraction(wp, prev_height); +} + +void scroll_to_fraction(win_T *wp, int prev_height) +{ + linenr_T lnum; + int sline, line_size; + int height = wp->w_height; + /* Don't change w_topline when height is zero. Don't set w_topline when * 'scrollbind' is set and this isn't the current window. */ if (height > 0 |