diff --git a/src/charset.c b/src/charset.c index c2137049b..37c333622 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) @@ -855,6 +858,16 @@ vim_isfilec(int c) return (c >= 0x100 || (c > 0 && (g_chartab[c] & CT_FNAME_CHAR))); } +/* + * 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). diff --git a/src/proto/charset.pro b/src/proto/charset.pro index 97aa71e5c..ebb548a8c 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 24abce462..8ca9313a3 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 38d1ec083..43dfad462 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 e3e724776..a62fb9241 100644 --- a/src/version.c +++ b/src/version.c @@ -735,6 +735,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 138, /**/ 137, /**/