Mercurial > vim
changeset 29595:5233acfa06f1 v9.0.0138
patch 9.0.0138: not enough characters accepted for 'spellfile'
Commit: https://github.com/vim/vim/commit/bc49c5f48f89c2d6f4d88ee77f44a11d68293be3
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Aug 4 13:01:48 2022 +0100
patch 9.0.0138: not enough characters accepted for 'spellfile'
Problem: Not enough characters accepted for 'spellfile'.
Solution: Add vim_is_fname_char() and use it for 'spellfile'.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 04 Aug 2022 14:15:29 +0200 |
parents | 6eea3c60c85c |
children | aea558552904 |
files | src/charset.c src/proto/charset.pro src/spell.c src/testdir/test_spellfile.vim src/version.c |
diffstat | 5 files changed, 27 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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("]")
--- 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);
--- 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; }
--- 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