fix(options): fix :setglobal not working for 'spelloptions' (#30894)

This commit is contained in:
zeertzjq 2024-10-22 11:34:09 +08:00 committed by GitHub
parent f663243e95
commit 1b9dafa67b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 59 additions and 4 deletions

View File

@ -5325,6 +5325,7 @@ void buf_copy_options(buf_T *buf, int flags)
COPY_OPT_SCTX(buf, BV_SPL); COPY_OPT_SCTX(buf, BV_SPL);
buf->b_s.b_p_spo = xstrdup(p_spo); buf->b_s.b_p_spo = xstrdup(p_spo);
COPY_OPT_SCTX(buf, BV_SPO); COPY_OPT_SCTX(buf, BV_SPO);
buf->b_s.b_p_spo_flags = spo_flags;
buf->b_p_inde = xstrdup(p_inde); buf->b_p_inde = xstrdup(p_inde);
COPY_OPT_SCTX(buf, BV_INDE); COPY_OPT_SCTX(buf, BV_INDE);
buf->b_p_indk = xstrdup(p_indk); buf->b_p_indk = xstrdup(p_indk);

View File

@ -2116,7 +2116,7 @@ const char *did_set_spellfile(optset_T *args)
// When there is a window for this buffer in which 'spell' // When there is a window for this buffer in which 'spell'
// is set load the wordlists. // is set load the wordlists.
if ((!valid_spellfile(*varp))) { if (!valid_spellfile(*varp)) {
return e_invarg; return e_invarg;
} }
return did_set_spell_option(); return did_set_spell_option();
@ -2139,8 +2139,15 @@ const char *did_set_spelllang(optset_T *args)
const char *did_set_spelloptions(optset_T *args) const char *did_set_spelloptions(optset_T *args)
{ {
win_T *win = (win_T *)args->os_win; win_T *win = (win_T *)args->os_win;
if (opt_strings_flags(win->w_s->b_p_spo, p_spo_values, &(win->w_s->b_p_spo_flags), int opt_flags = args->os_flags;
true) != OK) { const char *val = args->os_newval.string.data;
if (!(opt_flags & OPT_LOCAL)
&& opt_strings_flags(val, p_spo_values, &spo_flags, true) != OK) {
return e_invarg;
}
if (!(opt_flags & OPT_GLOBAL)
&& opt_strings_flags(val, p_spo_values, &win->w_s->b_p_spo_flags, true) != OK) {
return e_invarg; return e_invarg;
} }
return NULL; return NULL;

View File

@ -408,4 +408,52 @@ describe("'spell'", function()
{5:-- VISUAL LINE --} | {5:-- VISUAL LINE --} |
]]) ]])
end) end)
it("global value works properly for 'spelloptions'", function()
screen:try_resize(43, 3)
exec('set spell')
-- :setglobal applies to future buffers but not current buffer
exec('setglobal spelloptions=camel')
insert('Here is TheCamelWord being spellchecked')
screen:expect([[
Here is {1:TheCamelWord} being spellchecke^d |
{0:~ }|
|
]])
exec('enew')
insert('There is TheCamelWord being spellchecked')
screen:expect([[
There is TheCamelWord being spellchecke^d |
{0:~ }|
|
]])
-- :setlocal applies to current buffer but not future buffers
exec('setlocal spelloptions=')
screen:expect([[
There is {1:TheCamelWord} being spellchecke^d |
{0:~ }|
|
]])
exec('enew')
insert('What is TheCamelWord being spellchecked')
screen:expect([[
What is TheCamelWord being spellchecke^d |
{0:~ }|
|
]])
-- :set applies to both current buffer and future buffers
exec('set spelloptions=')
screen:expect([[
What is {1:TheCamelWord} being spellchecke^d |
{0:~ }|
|
]])
exec('enew')
insert('Where is TheCamelWord being spellchecked')
screen:expect([[
Where is {1:TheCamelWord} being spellchecke^d |
{0:~ }|
|
]])
end)
end) end)

View File

@ -56,7 +56,6 @@ let skip_setglobal_reasons = #{
\ shiftwidth: 'TODO: fix missing error handling for setglobal', \ shiftwidth: 'TODO: fix missing error handling for setglobal',
\ sidescrolloff: 'TODO: fix missing error handling for setglobal', \ sidescrolloff: 'TODO: fix missing error handling for setglobal',
\ signcolumn: 'TODO(nvim): fix missing error handling for setglobal', \ signcolumn: 'TODO(nvim): fix missing error handling for setglobal',
\ spelloptions: 'TODO(nvim): fix missing error handling for setglobal',
\ tabstop: 'TODO: fix missing error handling for setglobal', \ tabstop: 'TODO: fix missing error handling for setglobal',
\ termwinkey: 'TODO: fix missing error handling for setglobal', \ termwinkey: 'TODO: fix missing error handling for setglobal',
\ termwinsize: 'TODO: fix missing error handling for setglobal', \ termwinsize: 'TODO: fix missing error handling for setglobal',