Mercurial > vim
diff src/testdir/test_options.vim @ 32788:80152cf7ce63 v9.0.1710
patch 9.0.1710: scrolloff options work slightly different
Commit: https://github.com/vim/vim/commit/4a8eb6e7a9df10f79bf95301ced012f0d6a13088
Author: Christian Brabandt <cb@256bit.org>
Date: Sun Aug 13 19:43:42 2023 +0200
patch 9.0.1710: scrolloff options work slightly different
Problem: sidescrolloff and scrolloff options work slightly
different than other global-local options
Solution: Make it behave consistent for all global-local options
It was noticed, that sidescrolloff and scrolloff options behave
differently in comparison to other global-local window options like
'listchars'
So make those two behave like other global-local options. Also add some
extra documentation for a few special local-window options.
Add a few tests to make sure all global-local window options behave
similar
closes: #12956
closes: #12643
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 13 Aug 2023 20:00:04 +0200 |
parents | 1b9a29f7fe86 |
children | 7771cb060685 |
line wrap: on
line diff
--- a/src/testdir/test_options.vim +++ b/src/testdir/test_options.vim @@ -1689,4 +1689,89 @@ func Test_string_option_revert_on_failur bw! endfunc +func Test_set_option_window_global_local() + new Xbuffer1 + let [ _gso, _lso ] = [ &g:scrolloff, &l:scrolloff ] + setlocal scrolloff=2 + setglobal scrolloff=3 + setl modified + " A new buffer has its own window-local options + hide enew + call assert_equal(-1, &l:scrolloff) + call assert_equal(3, &g:scrolloff) + " A new window opened with its own buffer-local options + new + call assert_equal(-1, &l:scrolloff) + call assert_equal(3, &g:scrolloff) + " Re-open Xbuffer1 and it should use + " the previous set window-local options + b Xbuffer1 + call assert_equal(2, &l:scrolloff) + call assert_equal(3, &g:scrolloff) + bw! + bw! + let &g:scrolloff = _gso +endfunc + +func GetGlobalLocalWindowOptions() + new + sil! r $VIMRUNTIME/doc/options.txt + " Filter for global or local to window + v/^'.*'.*\n.*global or local to window |global-local/d + " get option value and type + sil %s/^'\([^']*\)'.*'\s\+\(\w\+\)\s\+(default \%(\(".*"\|\d\+\|empty\)\).*/\1 \2 \3/g + sil %s/empty/""/g + " split the result + let result=getline(1,'$')->map({_, val -> split(val, ' ')}) + bw! + return result +endfunc + +func Test_set_option_window_global_local_all() + new Xbuffer2 + + let optionlist = GetGlobalLocalWindowOptions() + for [opt, type, default] in optionlist + let _old = eval('&g:' .. opt) + if type == 'string' + if opt == 'fillchars' + exe 'setl ' .. opt .. '=vert:+' + exe 'setg ' .. opt .. '=vert:+,fold:+' + elseif opt == 'listchars' + exe 'setl ' .. opt .. '=tab:>>' + exe 'setg ' .. opt .. '=tab:++' + elseif opt == 'virtualedit' + exe 'setl ' .. opt .. '=all' + exe 'setg ' .. opt .. '=block' + else + exe 'setl ' .. opt .. '=Local' + exe 'setg ' .. opt .. '=Global' + endif + elseif type == 'number' + exe 'setl ' .. opt .. '=5' + exe 'setg ' .. opt .. '=10' + endif + setl modified + hide enew + if type == 'string' + call assert_equal('', eval('&l:' .. opt)) + if opt == 'fillchars' + call assert_equal('vert:+,fold:+', eval('&g:' .. opt), 'option:' .. opt) + elseif opt == 'listchars' + call assert_equal('tab:++', eval('&g:' .. opt), 'option:' .. opt) + elseif opt == 'virtualedit' + call assert_equal('block', eval('&g:' .. opt), 'option:' .. opt) + else + call assert_equal('Global', eval('&g:' .. opt), 'option:' .. opt) + endif + elseif type == 'number' + call assert_equal(-1, eval('&l:' .. opt), 'option:' .. opt) + call assert_equal(10, eval('&g:' .. opt), 'option:' .. opt) + endif + bw! + exe 'let &g:' .. opt .. '=' .. default + endfor + bw! +endfunc + " vim: shiftwidth=2 sts=2 expandtab