diff --git a/7.4.280 b/7.4.280 new file mode 100644 index 0000000..6b392df --- /dev/null +++ b/7.4.280 @@ -0,0 +1,125 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.280 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.280 +Problem: When using a session file the relative position of the cursor is + not restored if there is another tab. (Nobuhiro Takasaki) +Solution: Update w_wrow before calculating the fraction. +Files: src/window.c + + +*** ../vim-7.4.279/src/window.c 2014-03-23 15:12:29.943264337 +0100 +--- src/window.c 2014-05-07 20:18:55.237270409 +0200 +*************** +*** 5623,5629 **** + win_T *wp; + { + wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT +! + FRACTION_MULT / 2) / (long)wp->w_height; + } + + /* +--- 5623,5629 ---- + win_T *wp; + { + wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT +! + wp->w_height / 2) / (long)wp->w_height; + } + + /* +*************** +*** 5638,5643 **** +--- 5638,5644 ---- + { + 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. */ +*************** +*** 5646,5653 **** + 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); + + wp->w_height = height; + wp->w_skipcol = 0; +--- 5647,5659 ---- + if (wp->w_height == height) + return; /* nothing to do */ + +! 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; +*************** +*** 5667,5673 **** + 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; + line_size = plines_win_col(wp, lnum, (long)(wp->w_cursor.col)) - 1; + sline = wp->w_wrow - line_size; + +--- 5673,5680 ---- + 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 / 2) / FRACTION_MULT; + line_size = plines_win_col(wp, lnum, (long)(wp->w_cursor.col)) - 1; + sline = wp->w_wrow - line_size; + +*************** +*** 5757,5763 **** + update_topline(); + curs_columns(FALSE); /* validate w_wrow */ + } +! wp->w_prev_fraction_row = wp->w_wrow; + + win_comp_scroll(wp); + redraw_win_later(wp, SOME_VALID); +--- 5764,5771 ---- + update_topline(); + curs_columns(FALSE); /* validate w_wrow */ + } +! if (prev_height > 0) +! wp->w_prev_fraction_row = wp->w_wrow; + + win_comp_scroll(wp); + redraw_win_later(wp, SOME_VALID); +*** ../vim-7.4.279/src/version.c 2014-05-07 18:35:25.669216052 +0200 +--- src/version.c 2014-05-07 20:24:14.313273202 +0200 +*************** +*** 736,737 **** +--- 736,739 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 280, + /**/ + +-- +~ +~ +~ +".signature" 4 lines, 50 characters written + + /// 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 ///