changeset 12718:f8f505ffc0a6 v8.0.1237

patch 8.0.1237: ":set scroll&" often gives an error commit https://github.com/vim/vim/commit/af2d20c6285c1d2973e3d9b5e8f727e3ed180493 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Oct 29 15:26:57 2017 +0100 patch 8.0.1237: ":set scroll&" often gives an error Problem: ":set scroll&" often gives an error. Solution: Don't use a fixed default value, use half the window height. Add a test. (Ozaki Kiichi, closes #2104)
author Christian Brabandt <cb@256bit.org>
date Sun, 29 Oct 2017 15:30:04 +0100
parents a4882c034ad0
children cd6ab105a71a
files src/Makefile src/option.c src/testdir/test_alot.vim src/testdir/test_scroll_opt.vim src/version.c
diffstat 5 files changed, 43 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/Makefile
+++ b/src/Makefile
@@ -2242,6 +2242,7 @@ test_arglist \
 	test_reltime \
 	test_retab \
 	test_ruby \
+	test_scroll_opt \
 	test_scrollbind \
 	test_search \
 	test_searchpos \
--- a/src/option.c
+++ b/src/option.c
@@ -2359,7 +2359,7 @@ static struct vimoption options[] =
 			    SCRIPTID_INIT},
     {"scroll",	    "scr",  P_NUM|P_NO_MKRC|P_VI_DEF,
 			    (char_u *)VAR_WIN, PV_SCROLL,
-			    {(char_u *)12L, (char_u *)0L} SCRIPTID_INIT},
+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
     {"scrollbind",  "scb",  P_BOOL|P_VI_DEF,
 #ifdef FEAT_SCROLLBIND
 			    (char_u *)VAR_WIN, PV_SCBIND,
@@ -3904,10 +3904,9 @@ set_init_2(void)
     int		idx;
 
     /*
-     * 'scroll' defaults to half the window height. Note that this default is
-     * wrong when the window height changes.
+     * 'scroll' defaults to half the window height. The stored default is zero,
+     * which results in the actual value computed from the window height.
      */
-    set_number_default("scroll", (long)((long_u)Rows >> 1));
     idx = findoption((char_u *)"scroll");
     if (idx >= 0 && !(options[idx].flags & P_WAS_SET))
 	set_option_default(idx, OPT_LOCAL, p_cp);
--- a/src/testdir/test_alot.vim
+++ b/src/testdir/test_alot.vim
@@ -41,6 +41,7 @@ source test_popup.vim
 source test_put.vim
 source test_recover.vim
 source test_reltime.vim
+source test_scroll_opt.vim
 source test_searchpos.vim
 source test_set.vim
 source test_sort.vim
new file mode 100644
--- /dev/null
+++ b/src/testdir/test_scroll_opt.vim
@@ -0,0 +1,36 @@
+" Test for reset 'scroll'
+"
+
+func Test_reset_scroll()
+  let scr = &l:scroll
+
+  setlocal scroll=1
+  setlocal scroll&
+  call assert_equal(scr, &l:scroll)
+
+  setlocal scroll=1
+  setlocal scroll=0
+  call assert_equal(scr, &l:scroll)
+
+  try
+    execute 'setlocal scroll=' . (winheight(0) + 1)
+    " not reached
+    call assert_false(1)
+  catch
+    call assert_exception('E49:')
+  endtry
+
+  split
+
+  let scr = &l:scroll
+
+  setlocal scroll=1
+  setlocal scroll&
+  call assert_equal(scr, &l:scroll)
+
+  setlocal scroll=1
+  setlocal scroll=0
+  call assert_equal(scr, &l:scroll)
+
+  quit!
+endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1237,
+/**/
     1236,
 /**/
     1235,