mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 11:28:22 +00:00
API: make nvim_win_set_option() set window-global, not buffer-local #9110
NB: the `!(flags & SOPT_GLOBAL)` exception is for 'statusline'. Because `:set statusline=...` sets the global value for _all_ windows, `:setlocal` is the best we can do there. This is a one-of-a-kind option that doesn't work like any other option.
This commit is contained in:

committed by
Justin M. Keyes

parent
b10d703213
commit
fb19aeeb33
@@ -394,7 +394,9 @@ void set_option_to(uint64_t channel_id, void *to, int type,
|
|||||||
current_SID = channel_id == LUA_INTERNAL_CALL ? SID_LUA : SID_API_CLIENT;
|
current_SID = channel_id == LUA_INTERNAL_CALL ? SID_LUA : SID_API_CLIENT;
|
||||||
current_channel_id = channel_id;
|
current_channel_id = channel_id;
|
||||||
|
|
||||||
const int opt_flags = (type == SREQ_GLOBAL) ? OPT_GLOBAL : OPT_LOCAL;
|
const int opt_flags = (type == SREQ_WIN && !(flags & SOPT_GLOBAL))
|
||||||
|
? 0 : (type == SREQ_GLOBAL)
|
||||||
|
? OPT_GLOBAL : OPT_LOCAL;
|
||||||
set_option_value_for(name.data, numval, stringval,
|
set_option_value_for(name.data, numval, stringval,
|
||||||
opt_flags, type, to, err);
|
opt_flags, type, to, err);
|
||||||
|
|
||||||
|
@@ -212,10 +212,18 @@ describe('API/win', function()
|
|||||||
it('works', function()
|
it('works', function()
|
||||||
curwin('set_option', 'colorcolumn', '4,3')
|
curwin('set_option', 'colorcolumn', '4,3')
|
||||||
eq('4,3', curwin('get_option', 'colorcolumn'))
|
eq('4,3', curwin('get_option', 'colorcolumn'))
|
||||||
|
command("set modified hidden")
|
||||||
|
command("enew") -- edit new buffer, window option is preserved
|
||||||
|
eq('4,3', curwin('get_option', 'colorcolumn'))
|
||||||
|
|
||||||
-- global-local option
|
-- global-local option
|
||||||
curwin('set_option', 'statusline', 'window-status')
|
curwin('set_option', 'statusline', 'window-status')
|
||||||
eq('window-status', curwin('get_option', 'statusline'))
|
eq('window-status', curwin('get_option', 'statusline'))
|
||||||
eq('', nvim('get_option', 'statusline'))
|
eq('', nvim('get_option', 'statusline'))
|
||||||
|
command("set modified")
|
||||||
|
command("enew") -- global-local: not preserved in new buffer
|
||||||
|
eq({false, "Failed to get value for option 'statusline'"}, meth_pcall(curwin, 'get_option', 'statusline'))
|
||||||
|
eq('', eval('&l:statusline')) -- confirm local value was not copied
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
@@ -228,9 +228,9 @@ describe('getbufvar() function', function()
|
|||||||
eq(0, funcs.getbufvar(1, '&g:number'))
|
eq(0, funcs.getbufvar(1, '&g:number'))
|
||||||
command('new')
|
command('new')
|
||||||
-- But with window-local options it probably does not what you expect
|
-- But with window-local options it probably does not what you expect
|
||||||
curwinmeths.set_option('number', true)
|
command("setl number")
|
||||||
-- (note that current window’s buffer is 2, but getbufvar() receives 1)
|
-- (note that current window’s buffer is 2, but getbufvar() receives 1)
|
||||||
eq(2, bufmeths.get_number(curwinmeths.get_buf()))
|
eq({id=2}, curwinmeths.get_buf())
|
||||||
eq(1, funcs.getbufvar(1, '&number'))
|
eq(1, funcs.getbufvar(1, '&number'))
|
||||||
eq(1, funcs.getbufvar(1, '&l:number'))
|
eq(1, funcs.getbufvar(1, '&l:number'))
|
||||||
-- You can get global value though, if you find this useful.
|
-- You can get global value though, if you find this useful.
|
||||||
|
Reference in New Issue
Block a user