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.

46328f9a1c
This commit is contained in:
lonerover
2017-02-07 15:48:01 +08:00
parent 7629176fb1
commit 67eae93557
3 changed files with 17 additions and 3 deletions

View File

@@ -1007,6 +1007,10 @@ void ex_diffsplit(exarg_T *eap)
bufref_T old_curbuf; bufref_T old_curbuf;
set_bufref(&old_curbuf, 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 // don't use a new tab page, each tab page has its own diffs
cmdmod.tab = 0; cmdmod.tab = 0;
@@ -1032,6 +1036,9 @@ void ex_diffsplit(exarg_T *eap)
curwin->w_cursor.lnum); 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);
} }
} }
} }

View File

@@ -161,7 +161,7 @@ static int included_patches[] = {
// 2282 NA // 2282 NA
// 2281 NA // 2281 NA
// 2280, // 2280,
// 2279, 2279,
// 2278 NA // 2278 NA
2277, 2277,
// 2276, // 2276,

View File

@@ -4717,8 +4717,6 @@ void set_fraction(win_T *wp)
*/ */
void win_new_height(win_T *wp, int height) void win_new_height(win_T *wp, int height)
{ {
linenr_T lnum;
int sline, line_size;
int prev_height = wp->w_height; int prev_height = wp->w_height;
/* Don't want a negative height. Happens when splitting a tiny window. /* 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_height = height;
wp->w_skipcol = 0; 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 /* 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. */ * 'scrollbind' is set and this isn't the current window. */
if (height > 0 if (height > 0