diff options
Diffstat (limited to 'data/vim/patches/8.1.0994')
-rw-r--r-- | data/vim/patches/8.1.0994 | 308 |
1 files changed, 0 insertions, 308 deletions
diff --git a/data/vim/patches/8.1.0994 b/data/vim/patches/8.1.0994 deleted file mode 100644 index 766c0de2c..000000000 --- a/data/vim/patches/8.1.0994 +++ /dev/null @@ -1,308 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 8.1.0994 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 8.1.0994 -Problem: Relative cursor position is not calculated correctly. -Solution: Always set topline, also when window is one line only. - (Robert Webb) Add more info to getwininfo() for testing. -Files: src/window.c, src/evalfunc.c, runtime/doc/eval.txt, - src/testdir/test_window_cmd.vim - - -*** ../vim-8.1.0993/src/window.c 2019-02-22 17:56:02.787842436 +0100 ---- src/window.c 2019-03-04 13:13:19.387148607 +0100 -*************** -*** 5719,5726 **** - set_fraction(win_T *wp) - { - if (wp->w_height > 1) - wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT -! + wp->w_height / 2) / (long)wp->w_height; - } - - /* ---- 5719,5729 ---- - set_fraction(win_T *wp) - { - if (wp->w_height > 1) -+ // When cursor is in the first line the percentage is computed as if -+ // it's halfway that line. Thus with two lines it is 25%, with three -+ // lines 17%, etc. Similarly for the last line: 75%, 83%, etc. - wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT -! + FRACTION_MULT / 2) / (long)wp->w_height; - } - - /* -*************** -*** 5770,5777 **** - int sline, line_size; - int height = wp->w_height; - -! /* 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. */ - if (height > 0 && (!wp->w_p_scb || wp == curwin)) - { - /* ---- 5773,5780 ---- - int sline, line_size; - int height = wp->w_height; - -! // 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. - if (height > 0 && (!wp->w_p_scb || wp == curwin)) - { - /* -*************** -*** 5781,5788 **** - 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; - ---- 5784,5791 ---- - 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; - -*************** -*** 5818,5824 **** - --wp->w_wrow; - } - } -- set_topline(wp, lnum); - } - else if (sline > 0) - { ---- 5821,5826 ---- -*************** -*** 5859,5871 **** - } - else if (sline > 0) - { -! /* First line of file reached, use that as topline. */ - lnum = 1; - wp->w_wrow -= sline; - } -- -- set_topline(wp, lnum); - } - } - - if (wp == curwin) ---- 5861,5872 ---- - } - else if (sline > 0) - { -! // First line of file reached, use that as topline. - lnum = 1; - wp->w_wrow -= sline; - } - } -+ set_topline(wp, lnum); - } - - if (wp == curwin) -*** ../vim-8.1.0993/src/evalfunc.c 2019-03-02 10:13:36.792974862 +0100 ---- src/evalfunc.c 2019-03-02 14:10:35.133529737 +0100 -*************** -*** 5762,5767 **** ---- 5762,5769 ---- - dict_add_number(dict, "winid", wp->w_id); - dict_add_number(dict, "height", wp->w_height); - dict_add_number(dict, "winrow", wp->w_winrow + 1); -+ dict_add_number(dict, "topline", wp->w_topline); -+ dict_add_number(dict, "botline", wp->w_botline - 1); - #ifdef FEAT_MENU - dict_add_number(dict, "winbar", wp->w_winbar_height); - #endif -*** ../vim-8.1.0993/runtime/doc/eval.txt 2019-02-12 22:28:27.841232690 +0100 ---- runtime/doc/eval.txt 2019-03-02 14:09:27.798085747 +0100 -*************** -*** 5195,5200 **** ---- 5228,5234 ---- - tab pages is returned. - - Each List item is a Dictionary with the following entries: -+ botline last displayed buffer line - bufnr number of buffer in the window - height window height (excluding winbar) - loclist 1 if showing a location list -*************** -*** 5204,5209 **** ---- 5238,5244 ---- - terminal 1 if a terminal window - {only with the +terminal feature} - tabnr tab page number -+ topline first displayed buffer line - variables a reference to the dictionary with - window-local variables - width window width -*** ../vim-8.1.0993/src/testdir/test_window_cmd.vim 2019-01-09 23:00:58.001176090 +0100 ---- src/testdir/test_window_cmd.vim 2019-03-04 13:09:05.308910495 +0100 -*************** -*** 615,618 **** ---- 615,746 ---- - delfunc Fun_RenewFile - endfunc - -+ func Test_relative_cursor_position_in_one_line_window() -+ new -+ only -+ call setline(1, range(1, 10000)) -+ normal 50% -+ let lnum = getcurpos()[1] -+ split -+ split -+ " make third window take as many lines as possible, other windows will -+ " become one line -+ 3wincmd w -+ for i in range(1, &lines - 6) -+ wincmd + -+ redraw! -+ endfor -+ -+ " first and second window should show cursor line -+ let wininfo = getwininfo() -+ call assert_equal(lnum, wininfo[0].topline) -+ call assert_equal(lnum, wininfo[1].topline) -+ -+ only! -+ bwipe! -+ endfunc -+ -+ func Test_relative_cursor_position_after_move_and_resize() -+ let so_save = &so -+ set so=0 -+ enew -+ call setline(1, range(1, 10000)) -+ normal 50% -+ split -+ 1wincmd w -+ " Move cursor to first line in window -+ normal H -+ redraw! -+ " Reduce window height to two lines -+ let height = winheight(0) -+ while winheight(0) > 2 -+ wincmd - -+ redraw! -+ endwhile -+ " move cursor to second/last line in window -+ normal j -+ " restore previous height -+ while winheight(0) < height -+ wincmd + -+ redraw! -+ endwhile -+ " make window two lines again -+ while winheight(0) > 2 -+ wincmd - -+ redraw! -+ endwhile -+ -+ " cursor should be at bottom line -+ let info = getwininfo(win_getid())[0] -+ call assert_equal(info.topline + 1, getcurpos()[1]) -+ -+ only! -+ bwipe! -+ let &so = so_save -+ endfunc -+ -+ func Test_relative_cursor_position_after_resize() -+ let so_save = &so -+ set so=0 -+ enew -+ call setline(1, range(1, 10000)) -+ normal 50% -+ split -+ 1wincmd w -+ let winid1 = win_getid() -+ let info = getwininfo(winid1)[0] -+ " Move cursor to second line in window -+ exe "normal " . (info.topline + 1) . "G" -+ redraw! -+ let lnum = getcurpos()[1] -+ -+ " Make the window only two lines high, cursor should end up in top line -+ 2wincmd w -+ exe (info.height - 2) . "wincmd +" -+ redraw! -+ let info = getwininfo(winid1)[0] -+ call assert_equal(lnum, info.topline) -+ -+ only! -+ bwipe! -+ let &so = so_save -+ endfunc -+ -+ func Test_relative_cursor_second_line_after_resize() -+ let so_save = &so -+ set so=0 -+ enew -+ call setline(1, range(1, 10000)) -+ normal 50% -+ split -+ 1wincmd w -+ let winid1 = win_getid() -+ let info = getwininfo(winid1)[0] -+ -+ " Make the window only two lines high -+ 2wincmd _ -+ -+ " Move cursor to second line in window -+ normal H -+ normal j -+ -+ " Make window size bigger, then back to 2 lines -+ for i in range(1, 10) -+ wincmd + -+ redraw! -+ endfor -+ for i in range(1, 10) -+ wincmd - -+ redraw! -+ endfor -+ -+ " cursor should end up in bottom line -+ let info = getwininfo(winid1)[0] -+ call assert_equal(info.topline + 1, getcurpos()[1]) -+ -+ only! -+ bwipe! -+ let &so = so_save -+ endfunc -+ - " vim: shiftwidth=2 sts=2 expandtab -*** ../vim-8.1.0993/src/version.c 2019-03-04 12:09:43.905395998 +0100 ---- src/version.c 2019-03-04 13:16:17.053913047 +0100 -*************** -*** 781,782 **** ---- 781,784 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 994, - /**/ - --- -hundred-and-one symptoms of being an internet addict: -36. You miss more than five meals a week downloading the latest games from - Apogee. - - /// 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 /// |