diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/version.c | 2 | ||||
-rw-r--r-- | src/nvim/window.c | 22 |
2 files changed, 17 insertions, 7 deletions
diff --git a/src/nvim/version.c b/src/nvim/version.c index 40ba96c758..0d872b7291 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -207,7 +207,7 @@ static int included_patches[] = { //283, //282, //281, - //280, + 280, //279, //278, 277, diff --git a/src/nvim/window.c b/src/nvim/window.c index 906a5a14d8..e0af0abc51 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -4457,8 +4457,8 @@ void win_drag_vsep_line(win_T *dragwin, int offset) */ static void set_fraction(win_T *wp) { - wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT - + FRACTION_MULT / 2) / (long)wp->w_height; + wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT + wp->w_height / 2) + / (long)wp->w_height; } /* @@ -4470,6 +4470,7 @@ 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. * Will equalize heights soon to fix it. */ @@ -4478,8 +4479,14 @@ void win_new_height(win_T *wp, int height) if (wp->w_height == height) return; /* nothing to do */ - if (wp->w_wrow != wp->w_prev_fraction_row && wp->w_height > 0) - set_fraction(wp); + if (wp->w_height > 0) { + if (wp == curwin) { + validate_cursor(); // w_wrow needs to be valid + } + if (wp->w_wrow != wp->w_prev_fraction_row) { + set_fraction(wp); + } + } wp->w_height = height; wp->w_skipcol = 0; @@ -4496,7 +4503,8 @@ void win_new_height(win_T *wp, int height) lnum = wp->w_cursor.lnum; if (lnum < 1) /* can happen when starting up */ lnum = 1; - wp->w_wrow = ((long)wp->w_fraction * (long)height - 1L) / FRACTION_MULT; + wp->w_wrow = ((long)wp->w_fraction * (long)height - 1L + FRACTION_MULT / 2) + / FRACTION_MULT; line_size = plines_win_col(wp, lnum, (long)(wp->w_cursor.col)) - 1; sline = wp->w_wrow - line_size; @@ -4567,7 +4575,9 @@ void win_new_height(win_T *wp, int height) update_topline(); curs_columns(FALSE); /* validate w_wrow */ } - wp->w_prev_fraction_row = wp->w_wrow; + if (prev_height > 0) { + wp->w_prev_fraction_row = wp->w_wrow; + } win_comp_scroll(wp); redraw_win_later(wp, SOME_VALID); |