diff options
author | Bram Moolenaar <bram@vim.org> | 2011-07-27 17:31:47 +0200 |
---|---|---|
committer | Bram Moolenaar <bram@vim.org> | 2011-07-27 17:31:47 +0200 |
commit | 3c915737ed2d55df4d1ed6432694eb3ca64ca617 (patch) | |
tree | 6fe3bece906b930c7defa375303ef6fce62a6a54 | |
parent | 7fa2184885796697afb41dda9713e3066ad4b9f2 (diff) | |
download | vim-3c915737ed2d55df4d1ed6432694eb3ca64ca617.tar.gz |
Problem: When the current directory name contains wildcard characters, such
as "foo[with]bar", the tags file can't be found. (Jeremy
Erickson)
Solution: When searching for matching files also match without expanding
wildcards. This is a bit of a hack.
-rw-r--r-- | src/misc1.c | 10 | ||||
-rw-r--r-- | src/misc2.c | 10 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim.h | 1 |
4 files changed, 16 insertions, 7 deletions
diff --git a/src/misc1.c b/src/misc1.c index a573b3b9..a3a20597 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -9119,7 +9119,9 @@ dos_expandpath( * all entries found with "matchname". */ if ((p[0] != '.' || starts_with_dot) && (matchname == NULL - || vim_regexec(®match, p, (colnr_T)0))) + || vim_regexec(®match, p, (colnr_T)0) + || ((flags & EW_NOTWILD) + && fnamencmp(path + (s - buf), p, e - s) == 0))) { #ifdef WIN3264 STRCPY(s, p); @@ -9323,7 +9325,7 @@ unix_expandpath(gap, path, wildoff, flags, didstar) e = p; *e = NUL; - /* now we have one wildcard component between "s" and "e" */ + /* Now we have one wildcard component between "s" and "e". */ /* Remove backslashes between "wildoff" and the start of the wildcard * component. */ for (p = buf + wildoff; p < s; ++p) @@ -9390,7 +9392,9 @@ unix_expandpath(gap, path, wildoff, flags, didstar) if (dp == NULL) break; if ((dp->d_name[0] != '.' || starts_with_dot) - && vim_regexec(®match, (char_u *)dp->d_name, (colnr_T)0)) + && (vim_regexec(®match, (char_u *)dp->d_name, (colnr_T)0) + || ((flags & EW_NOTWILD) + && fnamencmp(path + (s - buf), dp->d_name, e - s) == 0))) { STRCPY(s, dp->d_name); len = STRLEN(buf); diff --git a/src/misc2.c b/src/misc2.c index dfb1fc48..f91a64ac 100644 --- a/src/misc2.c +++ b/src/misc2.c @@ -4653,9 +4653,8 @@ vim_findfile_stopdir(buf) { if (r_ptr[0] == '\\' && r_ptr[1] == ';') { - /* overwrite the escape char, - * use STRLEN(r_ptr) to move the trailing '\0' - */ + /* Overwrite the escape char, + * use STRLEN(r_ptr) to move the trailing '\0'. */ STRMOVE(r_ptr, r_ptr + 1); r_ptr++; } @@ -4914,10 +4913,13 @@ vim_findfile(search_ctx_arg) stackp->ffs_filearray_size = 0; } else + /* Add EW_NOTWILD because the expanded path may contain + * wildcard characters that are to be taken literally. + * This is a bit of a hack. */ expand_wildcards((dirptrs[1] == NULL) ? 1 : 2, dirptrs, &stackp->ffs_filearray_size, &stackp->ffs_filearray, - EW_DIR|EW_ADDSLASH|EW_SILENT); + EW_DIR|EW_ADDSLASH|EW_SILENT|EW_NOTWILD); stackp->ffs_filearray_cur = 0; stackp->ffs_stage = 0; diff --git a/src/version.c b/src/version.c index fc515573..dbd76b35 100644 --- a/src/version.c +++ b/src/version.c @@ -710,6 +710,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 264, +/**/ 263, /**/ 262, @@ -816,6 +816,7 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname); #define EW_PATH 0x80 /* search in 'path' too */ #define EW_ICASE 0x100 /* ignore case */ #define EW_NOERROR 0x200 /* no error for bad regexp */ +#define EW_NOTWILD 0x400 /* add match with literal name if exists */ /* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND * is used when executing commands and EW_SILENT for interactive expanding. */ |