0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

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.
This commit is contained in:
Bram Moolenaar
2016-08-28 15:39:57 +02:00
parent 4427db9bb2
commit 46328f9a1c
4 changed files with 20 additions and 2 deletions

View File

@@ -1075,6 +1075,10 @@ ex_diffsplit(exarg_T *eap)
#ifdef FEAT_GUI
need_mouse_correct = TRUE;
#endif
/* 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;
@@ -1101,6 +1105,9 @@ ex_diffsplit(exarg_T *eap)
curbuf,
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

@@ -56,6 +56,7 @@ void win_drag_status_line(win_T *dragwin, int offset);
void win_drag_vsep_line(win_T *dragwin, int offset);
void set_fraction(win_T *wp);
void win_new_height(win_T *wp, int height);
void scroll_to_fraction(win_T *wp, int prev_height);
void win_new_width(win_T *wp, int width);
void win_comp_scroll(win_T *wp);
void command_height(void);

View File

@@ -763,6 +763,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
2279,
/**/
2278,
/**/

View File

@@ -5674,8 +5674,6 @@ 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.
@@ -5701,6 +5699,16 @@ 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