To: vim_dev@googlegroups.com Subject: Patch 7.3.084 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 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. Files: src/window.c *** ../vim-7.3.083/src/window.c 2010-09-21 16:56:29.000000000 +0200 --- src/window.c 2010-12-17 17:09:51.000000000 +0100 *************** *** 70,76 **** #endif /* FEAT_WINDOWS */ static win_T *win_alloc __ARGS((win_T *after, int hidden)); ! static void win_new_height __ARGS((win_T *, int)); #define URL_SLASH 1 /* path_is_url() has found "://" */ #define URL_BACKSLASH 2 /* path_is_url() has found ":\\" */ --- 70,77 ---- #endif /* FEAT_WINDOWS */ static win_T *win_alloc __ARGS((win_T *after, int hidden)); ! 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_BACKSLASH 2 /* path_is_url() has found ":\\" */ *************** *** 983,992 **** --- 984,999 ---- else 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 if (flags & WSP_VERT) { wp->w_p_scr = curwin->w_p_scr; + if (need_status) { win_new_height(oldwin, oldwin->w_height - 1); *************** *** 5453,5458 **** --- 5460,5478 ---- #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. * This takes care of the things inside the window, not what happens to the *************** *** 5465,5471 **** { linenr_T lnum; int sline, line_size; - #define FRACTION_MULT 16384L /* Don't want a negative height. Happens when splitting a tiny window. * Will equalize heights soon to fix it. */ --- 5485,5490 ---- *************** *** 5475,5482 **** return; /* nothing to do */ if (wp->w_wrow != wp->w_prev_fraction_row && wp->w_height > 0) ! wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT ! + FRACTION_MULT / 2) / (long)wp->w_height; wp->w_height = height; wp->w_skipcol = 0; --- 5494,5500 ---- return; /* nothing to do */ if (wp->w_wrow != wp->w_prev_fraction_row && wp->w_height > 0) ! set_fraction(wp); wp->w_height = height; wp->w_skipcol = 0; *** ../vim-7.3.083/src/version.c 2010-12-17 16:27:10.000000000 +0100 --- src/version.c 2010-12-17 17:14:19.000000000 +0100 *************** *** 716,717 **** --- 716,719 ---- { /* Add new patch number below this line */ + /**/ + 84, /**/ -- How To Keep A Healthy Level Of Insanity: 12. Sing along at the opera. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///