1
0
forked from aniani/vim

patch 9.0.1670: resetting local option to global value is inconsistent

Problem:    Resetting local option to global value is inconsistent.
Solution:   Handle "<" specifically for 'scrolloff' and 'sidescrolloff'.
            (closes #12594)
This commit is contained in:
Bram Moolenaar
2023-06-27 21:51:07 +01:00
parent 19e6c4fd2d
commit bf5f189e44
3 changed files with 18 additions and 4 deletions

View File

@@ -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);
}

View File

@@ -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&

View File

@@ -695,6 +695,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1670,
/**/
1669,
/**/