aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2017-02-10 10:10:09 -0500
committerGitHub <noreply@github.com>2017-02-10 10:10:09 -0500
commitbc33df245371136d46eb198748ef7d718e0a7ed1 (patch)
tree82ca00d4834286621288b6e6487bf3a52156094b /src
parent7ed1422521eeebdd57bc79a55f4385767976a9f2 (diff)
parent67eae935575b85719f3292d428d9d5387e0d7fb8 (diff)
downloadrneovim-bc33df245371136d46eb198748ef7d718e0a7ed1.tar.gz
rneovim-bc33df245371136d46eb198748ef7d718e0a7ed1.tar.bz2
rneovim-bc33df245371136d46eb198748ef7d718e0a7ed1.zip
Merge pull request #6076 from lonerover/vim-7.4.2275
vim-patch: 7.4.2275,7.4.2279
Diffstat (limited to 'src')
-rw-r--r--src/nvim/diff.c16
-rw-r--r--src/nvim/testdir/test_diffmode.vim16
-rw-r--r--src/nvim/version.c4
-rw-r--r--src/nvim/window.c11
4 files changed, 40 insertions, 7 deletions
diff --git a/src/nvim/diff.c b/src/nvim/diff.c
index aafd50687e..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);
}
}
}
@@ -1154,10 +1161,13 @@ void ex_diffoff(exarg_T *eap)
}
foldUpdateAll(wp);
-
- // make sure topline is not halfway through a fold
- changed_window_setting_win(wp);
}
+ // remove filler lines
+ wp->w_topfill = 0;
+
+ // make sure topline is not halfway a fold and cursor is
+ // invalidated
+ changed_window_setting_win(wp);
// Note: 'sbo' is not restored, it's a global option.
diff_buf_adjust(wp);
diff --git a/src/nvim/testdir/test_diffmode.vim b/src/nvim/testdir/test_diffmode.vim
index 7666594862..5de394de8e 100644
--- a/src/nvim/testdir/test_diffmode.vim
+++ b/src/nvim/testdir/test_diffmode.vim
@@ -202,3 +202,19 @@ func Test_diffget_diffput()
bwipe!
enew!
endfunc
+
+func Test_diffoff()
+ enew!
+ call setline(1, ['Two', 'Three'])
+ let normattr = screenattr(1, 1)
+ diffthis
+ botright vert new
+ call setline(1, ['One', '', 'Two', 'Three'])
+ diffthis
+ redraw
+ diffoff!
+ redraw
+ call assert_equal(normattr, screenattr(1, 1))
+ bwipe!
+ bwipe!
+endfunc
diff --git a/src/nvim/version.c b/src/nvim/version.c
index 6188bec91f..763447295b 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -161,11 +161,11 @@ static int included_patches[] = {
// 2282 NA
// 2281 NA
// 2280,
- // 2279,
+ 2279,
// 2278 NA
2277,
// 2276,
- // 2275,
+ 2275,
2274,
2273,
2272,
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