diff options
author | Bram Moolenaar <Bram@vim.org> | 2023-06-27 21:51:07 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2023-06-27 21:51:07 +0100 |
commit | bf5f189e449d6517239b79804d7a422a46946838 (patch) | |
tree | faeb73b096f41d9a1437aa15d155427cbcc6d887 | |
parent | 19e6c4fd2d262075d39cb802ea5b85f5ec92f153 (diff) |
patch 9.0.1670: resetting local option to global value is inconsistentv9.0.1670
Problem: Resetting local option to global value is inconsistent.
Solution: Handle "<" specifically for 'scrolloff' and 'sidescrolloff'.
(closes #12594)
-rw-r--r-- | src/option.c | 8 | ||||
-rw-r--r-- | src/testdir/test_options.vim | 12 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 18 insertions, 4 deletions
diff --git a/src/option.c b/src/option.c index e9c6a50add..3050dbc417 100644 --- a/src/option.c +++ b/src/option.c @@ -2135,10 +2135,14 @@ do_set_option_numeric( ((flags & P_VI_DEF) || cp_val) ? VI_DEFAULT : VIM_DEFAULT]; else if (nextchar == '<') { - // For 'undolevels' NO_LOCAL_UNDOLEVEL means to - // use the global value. if ((long *)varp == &curbuf->b_p_ul && opt_flags == OPT_LOCAL) + // for 'undolevels' NO_LOCAL_UNDOLEVEL means using the global value value = NO_LOCAL_UNDOLEVEL; + else if (opt_flags == OPT_LOCAL + && ((long *)varp == &curwin->w_p_siso + || (long *)varp == &curwin->w_p_so)) + // for 'scrolloff'/'sidescrolloff' -1 means using the global value + value = -1; else value = *(long *)get_varp_scope(&(options[opt_idx]), OPT_GLOBAL); } diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim index 015ecc122d..0de5e25f9a 100644 --- a/src/testdir/test_options.vim +++ b/src/testdir/test_options.vim @@ -954,12 +954,16 @@ func Test_local_scrolloff() wincmd w call assert_equal(5, &so) wincmd w + call assert_equal(3, &so) setlocal so< call assert_equal(5, &so) + setglob so=8 + call assert_equal(8, &so) + call assert_equal(-1, &l:so) setlocal so=0 call assert_equal(0, &so) setlocal so=-1 - call assert_equal(5, &so) + call assert_equal(8, &so) call assert_equal(7, &siso) setlocal siso=3 @@ -967,12 +971,16 @@ func Test_local_scrolloff() wincmd w call assert_equal(7, &siso) wincmd w + call assert_equal(3, &siso) setlocal siso< call assert_equal(7, &siso) + setglob siso=4 + call assert_equal(4, &siso) + call assert_equal(-1, &l:siso) setlocal siso=0 call assert_equal(0, &siso) setlocal siso=-1 - call assert_equal(7, &siso) + call assert_equal(4, &siso) close set so& diff --git a/src/version.c b/src/version.c index 316649fdd1..bc2b0b502f 100644 --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1670, +/**/ 1669, /**/ 1668, |