summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2023-06-27 21:51:07 +0100
committerBram Moolenaar <Bram@vim.org>2023-06-27 21:51:07 +0100
commitbf5f189e449d6517239b79804d7a422a46946838 (patch)
treefaeb73b096f41d9a1437aa15d155427cbcc6d887
parent19e6c4fd2d262075d39cb802ea5b85f5ec92f153 (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.c8
-rw-r--r--src/testdir/test_options.vim12
-rw-r--r--src/version.c2
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,