diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-08-04 13:01:48 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-08-04 13:01:48 +0100 |
commit | bc49c5f48f89c2d6f4d88ee77f44a11d68293be3 (patch) | |
tree | 810e9e2809e1e8cdfb4cc088ad1127bc141e7bb8 | |
parent | db7a88db8b52508d3df6d5947f7c4f3ef05d5f62 (diff) |
patch 9.0.0138: not enough characters accepted for 'spellfile'v9.0.0138
Problem: Not enough characters accepted for 'spellfile'.
Solution: Add vim_is_fname_char() and use it for 'spellfile'.
-rw-r--r-- | src/charset.c | 17 | ||||
-rw-r--r-- | src/proto/charset.pro | 1 | ||||
-rw-r--r-- | src/spell.c | 2 | ||||
-rw-r--r-- | src/testdir/test_spellfile.vim | 8 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 27 insertions, 3 deletions
diff --git a/src/charset.c b/src/charset.c index c2137049b7..37c333622d 100644 --- a/src/charset.c +++ b/src/charset.c @@ -225,7 +225,8 @@ buf_init_chartab( } else { - g_chartab[c] = (g_chartab[c] & ~CT_CELL_MASK) + 1; + g_chartab[c] = (g_chartab[c] & ~CT_CELL_MASK) + + 1; g_chartab[c] |= CT_PRINT_CHAR; } } @@ -846,8 +847,10 @@ vim_iswordp_buf(char_u *p, buf_T *buf) } /* - * return TRUE if 'c' is a valid file-name character + * Return TRUE if 'c' is a valid file-name character as specified with the + * 'isfname' option. * Assume characters above 0x100 are valid (multi-byte). + * To be used for commands like "gf". */ int vim_isfilec(int c) @@ -856,6 +859,16 @@ vim_isfilec(int c) } /* + * Return TRUE if 'c' is a valid file-name character, including characters left + * out of 'isfname' to make "gf" work, such as comma, space, '@', etc. + */ + int +vim_is_fname_char(int c) +{ + return vim_isfilec(c) || c == ',' || c == ' ' || c == '@'; +} + +/* * return TRUE if 'c' is a valid file-name character or a wildcard character * Assume characters above 0x100 are valid (multi-byte). * Explicitly interpret ']' as a wildcard character as mch_has_wildcard("]") diff --git a/src/proto/charset.pro b/src/proto/charset.pro index 97aa71e5c0..ebb548a8c4 100644 --- a/src/proto/charset.pro +++ b/src/proto/charset.pro @@ -25,6 +25,7 @@ int vim_iswordc_buf(int c, buf_T *buf); int vim_iswordp(char_u *p); int vim_iswordp_buf(char_u *p, buf_T *buf); int vim_isfilec(int c); +int vim_is_fname_char(int c); int vim_isfilec_or_wc(int c); int vim_isprintc(int c); int vim_isprintc_strict(int c); diff --git a/src/spell.c b/src/spell.c index 24abce4625..8ca9313a3d 100644 --- a/src/spell.c +++ b/src/spell.c @@ -4363,7 +4363,7 @@ valid_spellfile(char_u *val) char_u *s; for (s = val; *s != NUL; ++s) - if (!vim_isfilec(*s) && *s != ',' && *s != ' ') + if (!vim_is_fname_char(*s)) return FALSE; return TRUE; } diff --git a/src/testdir/test_spellfile.vim b/src/testdir/test_spellfile.vim index 38d1ec0839..43dfad4628 100644 --- a/src/testdir/test_spellfile.vim +++ b/src/testdir/test_spellfile.vim @@ -1160,4 +1160,12 @@ func Test_mkspellmem_opt() call assert_fails('set mkspellmem=1000,50,0', 'E474:') 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 = '' + delete('Xtest', 'rf') +enddef + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index e3e7247769..a62fb92411 100644 --- a/src/version.c +++ b/src/version.c @@ -736,6 +736,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 138, +/**/ 137, /**/ 136, |