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;
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);
}
}
}

View File

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

View File

@ -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