patch 9.1.0783: 'spell' option setting has problems Commit: https://github.com/vim/vim/commit/322ad0c953b7a3023cd2a65db61d05e180a5d682 Author: Milly <milly...@gmail.com> Date: Mon Oct 14 20:21:48 2024 +0200
patch 9.1.0783: 'spell' option setting has problems Problem: 'spell' option setting has problems Solution: correctly check for comma for 'spellfile' option, remove unnecessary checks, refactor slightly (Milly) closes: #15873 Signed-off-by: Milly <milly...@gmail.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/src/option.c b/src/option.c index cdd457b4d..a108c521a 100644 --- a/src/option.c +++ b/src/option.c @@ -2956,7 +2956,7 @@ didset_options(void) (void)spell_check_msm(); (void)spell_check_sps(); (void)compile_cap_prog(curwin->w_s); - (void)did_set_spell_option(TRUE); + (void)did_set_spell_option(); #endif // set cedit_key (void)did_set_cedit(NULL); diff --git a/src/optionstr.c b/src/optionstr.c index bf7135ab0..b1bb39a62 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -3584,7 +3584,7 @@ did_set_spellfile(optset_T *args) // If there is a window for this buffer in which 'spell' is set load the // wordlists. - return did_set_spell_option(TRUE); + return did_set_spell_option(); } /* @@ -3600,7 +3600,7 @@ did_set_spelllang(optset_T *args) // If there is a window for this buffer in which 'spell' is set load the // wordlists. - return did_set_spell_option(FALSE); + return did_set_spell_option(); } /* diff --git a/src/proto/spell.pro b/src/proto/spell.pro index 680bf34f4..a68de8f1d 100644 --- a/src/proto/spell.pro +++ b/src/proto/spell.pro @@ -45,6 +45,6 @@ void spell_expand_check_cap(colnr_T col); int expand_spelling(linenr_T lnum, char_u *pat, char_u ***matchp); int valid_spelllang(char_u *val); int valid_spellfile(char_u *val); -char *did_set_spell_option(int is_spellfile); +char *did_set_spell_option(void); char *compile_cap_prog(synblock_T *synblock); /* vim: set ft=c : */ diff --git a/src/spell.c b/src/spell.c index 909d426e2..5a7720f7f 100644 --- a/src/spell.c +++ b/src/spell.c @@ -2250,7 +2250,7 @@ parse_spelllang(win_T *wp) else { // One entry in 'spellfile'. - copy_option_part(&spf, spf_name, MAXPATHL - 5, ","); + copy_option_part(&spf, spf_name, MAXPATHL - 4, ","); STRCAT(spf_name, ".spl"); // If it was already found above then skip it. @@ -4441,11 +4441,22 @@ valid_spelllang(char_u *val) int valid_spellfile(char_u *val) { - char_u *s; + char_u spf_name[MAXPATHL]; + char_u *spf; + char_u *s; + int l; - for (s = val; *s != NUL; ++s) - if (!vim_is_fname_char(*s)) + spf = val; + while (*spf != NUL) + { + l = copy_option_part(&spf, spf_name, MAXPATHL, ","); + if (l >= MAXPATHL - 4 || l < 4 + || STRCMP(spf_name + l - 4, ".add") != 0) return FALSE; + for (s = spf_name; *s != NUL; ++s) + if (!vim_is_fname_char(*s)) + return FALSE; + } return TRUE; } @@ -4454,22 +4465,10 @@ valid_spellfile(char_u *val) * Return an error message or NULL for success. */ char * -did_set_spell_option(int is_spellfile) +did_set_spell_option(void) { char *errmsg = NULL; win_T *wp; - int l; - - if (is_spellfile) - { - l = (int)STRLEN(curwin->w_s->b_p_spf); - if (l > 0 && (l < 4 - || STRCMP(curwin->w_s->b_p_spf + l - 4, ".add") != 0)) - errmsg = e_invalid_argument; - } - - if (errmsg != NULL) - return errmsg; FOR_ALL_WINDOWS(wp) if (wp->w_buffer == curbuf && wp->w_p_spell) diff --git a/src/testdir/gen_opt_test.vim b/src/testdir/gen_opt_test.vim index 0d277606c..4ca3c0938 100644 --- a/src/testdir/gen_opt_test.vim +++ b/src/testdir/gen_opt_test.vim @@ -146,7 +146,11 @@ let test_values = { \ 'sessionoptions': [['', 'blank', 'help,options,slash'], ['xxx']], \ 'showcmdloc': [['last', 'statusline', 'tabline'], ['xxx']], \ 'signcolumn': [['', 'auto', 'no'], ['xxx', 'no,yes']], - \ 'spellfile': [['', 'file.en.add', '/tmp/dir\ with\ space/en.utf-8.add'], ['xxx', '/tmp/file']], + \ 'spellfile': [['', 'file.en.add', 'xxx.en.add,yyy.gb.add,zzz.ja.add', + \ '/tmp/dir\ with\ space/en.utf-8.add', + \ '/tmp/dir\,with\,comma/en.utf-8.add'], + \ ['xxx', '/tmp/file', ',file.en.add', 'xxx,yyy.en.add', + \ 'xxx.en.add,yyy,zzz.ja.add']], \ 'spelllang': [['', 'xxx', 'sr@latin'], ['not&lang', "that\ there"]], \ 'spelloptions': [['', 'camel'], ['xxx']], \ 'spellsuggest': [['', 'best', 'double,33'], ['xxx']], diff --git a/src/testdir/test_spellfile.vim b/src/testdir/test_spellfile.vim index 8abb68062..dd12698b9 100644 --- a/src/testdir/test_spellfile.vim +++ b/src/testdir/test_spellfile.vim @@ -1154,7 +1154,7 @@ endfunc " 'spellfile' accepts '@' on top of 'isfname'. def Test_spellfile_allow_at_character() mkdir('Xtest/the foo@bar,dir', 'p') - &spellfile = './Xtest/the foo@bar,dir/Xspellfile.add' + &spellfile = './Xtest/the foo@bar\,dir/Xspellfile.add' &spellfile = '' delete('Xtest', 'rf') enddef diff --git a/src/version.c b/src/version.c index c63621156..204356328 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 783, /**/ 782, /**/ -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/vim_dev/E1t0PpT-00GxDz-Lh%40256bit.org.