forked from aniani/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.
This commit is contained in:
@@ -1075,6 +1075,10 @@ ex_diffsplit(exarg_T *eap)
|
|||||||
#ifdef FEAT_GUI
|
#ifdef FEAT_GUI
|
||||||
need_mouse_correct = TRUE;
|
need_mouse_correct = TRUE;
|
||||||
#endif
|
#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 */
|
/* don't use a new tab page, each tab page has its own diffs */
|
||||||
cmdmod.tab = 0;
|
cmdmod.tab = 0;
|
||||||
|
|
||||||
@@ -1101,6 +1105,9 @@ ex_diffsplit(exarg_T *eap)
|
|||||||
curbuf,
|
curbuf,
|
||||||
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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 win_drag_vsep_line(win_T *dragwin, int offset);
|
||||||
void set_fraction(win_T *wp);
|
void set_fraction(win_T *wp);
|
||||||
void win_new_height(win_T *wp, int height);
|
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_new_width(win_T *wp, int width);
|
||||||
void win_comp_scroll(win_T *wp);
|
void win_comp_scroll(win_T *wp);
|
||||||
void command_height(void);
|
void command_height(void);
|
||||||
|
@@ -763,6 +763,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2279,
|
||||||
/**/
|
/**/
|
||||||
2278,
|
2278,
|
||||||
/**/
|
/**/
|
||||||
|
12
src/window.c
12
src/window.c
@@ -5674,8 +5674,6 @@ set_fraction(win_T *wp)
|
|||||||
void
|
void
|
||||||
win_new_height(win_T *wp, int height)
|
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.
|
||||||
@@ -5701,6 +5699,16 @@ 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
|
||||||
|
Reference in New Issue
Block a user