mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
updated for version 7.3.084
Problem: When splitting the window, the new one scrolls with the cursor at the top. Solution: Compute w_fraction before setting the new height.
This commit is contained in:
parent
540fc6fbdb
commit
0215e8e15b
@ -714,6 +714,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 */
|
||||||
|
/**/
|
||||||
|
84,
|
||||||
/**/
|
/**/
|
||||||
83,
|
83,
|
||||||
/**/
|
/**/
|
||||||
|
26
src/window.c
26
src/window.c
@ -70,7 +70,8 @@ static win_T *restore_snapshot_rec __ARGS((frame_T *sn, frame_T *fr));
|
|||||||
#endif /* FEAT_WINDOWS */
|
#endif /* FEAT_WINDOWS */
|
||||||
|
|
||||||
static win_T *win_alloc __ARGS((win_T *after, int hidden));
|
static win_T *win_alloc __ARGS((win_T *after, int hidden));
|
||||||
static void win_new_height __ARGS((win_T *, int));
|
static void set_fraction __ARGS((win_T *wp));
|
||||||
|
static void win_new_height __ARGS((win_T *wp, int height));
|
||||||
|
|
||||||
#define URL_SLASH 1 /* path_is_url() has found "://" */
|
#define URL_SLASH 1 /* path_is_url() has found "://" */
|
||||||
#define URL_BACKSLASH 2 /* path_is_url() has found ":\\" */
|
#define URL_BACKSLASH 2 /* path_is_url() has found ":\\" */
|
||||||
@ -983,10 +984,16 @@ win_split_ins(size, flags, newwin, dir)
|
|||||||
else
|
else
|
||||||
frame_append(curfrp, frp);
|
frame_append(curfrp, frp);
|
||||||
|
|
||||||
|
/* Set w_fraction now so that the cursor keeps the same relative
|
||||||
|
* vertical position. */
|
||||||
|
set_fraction(oldwin);
|
||||||
|
wp->w_fraction = oldwin->w_fraction;
|
||||||
|
|
||||||
#ifdef FEAT_VERTSPLIT
|
#ifdef FEAT_VERTSPLIT
|
||||||
if (flags & WSP_VERT)
|
if (flags & WSP_VERT)
|
||||||
{
|
{
|
||||||
wp->w_p_scr = curwin->w_p_scr;
|
wp->w_p_scr = curwin->w_p_scr;
|
||||||
|
|
||||||
if (need_status)
|
if (need_status)
|
||||||
{
|
{
|
||||||
win_new_height(oldwin, oldwin->w_height - 1);
|
win_new_height(oldwin, oldwin->w_height - 1);
|
||||||
@ -5453,6 +5460,19 @@ win_drag_vsep_line(dragwin, offset)
|
|||||||
|
|
||||||
#endif /* FEAT_WINDOWS */
|
#endif /* FEAT_WINDOWS */
|
||||||
|
|
||||||
|
#define FRACTION_MULT 16384L
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set wp->w_fraction for the current w_wrow and w_height.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
set_fraction(wp)
|
||||||
|
win_T *wp;
|
||||||
|
{
|
||||||
|
wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
|
||||||
|
+ FRACTION_MULT / 2) / (long)wp->w_height;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the height of a window.
|
* Set the height of a window.
|
||||||
* This takes care of the things inside the window, not what happens to the
|
* This takes care of the things inside the window, not what happens to the
|
||||||
@ -5465,7 +5485,6 @@ win_new_height(wp, height)
|
|||||||
{
|
{
|
||||||
linenr_T lnum;
|
linenr_T lnum;
|
||||||
int sline, line_size;
|
int sline, line_size;
|
||||||
#define FRACTION_MULT 16384L
|
|
||||||
|
|
||||||
/* Don't want a negative height. Happens when splitting a tiny window.
|
/* Don't want a negative height. Happens when splitting a tiny window.
|
||||||
* Will equalize heights soon to fix it. */
|
* Will equalize heights soon to fix it. */
|
||||||
@ -5475,8 +5494,7 @@ win_new_height(wp, height)
|
|||||||
return; /* nothing to do */
|
return; /* nothing to do */
|
||||||
|
|
||||||
if (wp->w_wrow != wp->w_prev_fraction_row && wp->w_height > 0)
|
if (wp->w_wrow != wp->w_prev_fraction_row && wp->w_height > 0)
|
||||||
wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
|
set_fraction(wp);
|
||||||
+ FRACTION_MULT / 2) / (long)wp->w_height;
|
|
||||||
|
|
||||||
wp->w_height = height;
|
wp->w_height = height;
|
||||||
wp->w_skipcol = 0;
|
wp->w_skipcol = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user