summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0994
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0994')
-rw-r--r--data/vim/patches/8.1.0994308
1 files changed, 308 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0994 b/data/vim/patches/8.1.0994
new file mode 100644
index 000000000..766c0de2c
--- /dev/null
+++ b/data/vim/patches/8.1.0994
@@ -0,0 +1,308 @@
+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 ///