diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-08-23 16:32:15 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2023-08-23 18:24:14 +0800 |
commit | 0ba27bb51d3297aec43e78050cc3adcf6879db22 (patch) | |
tree | 9ea8990c9bebeca06d5a5e3989f0a70239797610 /test | |
parent | 99265d099c2c366eea936438734a323d1fb9b341 (diff) | |
download | rneovim-0ba27bb51d3297aec43e78050cc3adcf6879db22.tar.gz rneovim-0ba27bb51d3297aec43e78050cc3adcf6879db22.tar.bz2 rneovim-0ba27bb51d3297aec43e78050cc3adcf6879db22.zip |
vim-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: vim/vim#12956
closes: vim/vim#12643
https://github.com/vim/vim/commit/4a8eb6e7a9df10f79bf95301ced012f0d6a13088
Co-authored-by: Christian Brabandt <cb@256bit.org>
Diffstat (limited to 'test')
-rw-r--r-- | test/functional/lua/vim_spec.lua | 2 | ||||
-rw-r--r-- | test/old/testdir/test_options.vim | 86 |
2 files changed, 87 insertions, 1 deletions
diff --git a/test/functional/lua/vim_spec.lua b/test/functional/lua/vim_spec.lua index 35e87b71da..9338e95d10 100644 --- a/test/functional/lua/vim_spec.lua +++ b/test/functional/lua/vim_spec.lua @@ -1548,7 +1548,7 @@ describe('lua stdlib', function() eq(100, funcs.luaeval "vim.wo.scrolloff") exec_lua [[ vim.wo[0][0].scrolloff = 200 - vim.cmd "split" + vim.cmd "enew" ]] eq(100, funcs.luaeval "vim.wo.scrolloff") end) diff --git a/test/old/testdir/test_options.vim b/test/old/testdir/test_options.vim index aabb11a76a..12a262f2ad 100644 --- a/test/old/testdir/test_options.vim +++ b/test/old/testdir/test_options.vim @@ -1682,4 +1682,90 @@ func Test_string_option_revert_on_failure() 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, ' ')}) + let result = getline(1, '$')->map({_, val -> matchlist(val, '\([^ ]\+\) \+\([^ ]\+\) \+\(.*\)')[1:3]}) + 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 |