diff options
author | Bram Moolenaar <Bram@vim.org> | 2010-08-05 21:40:16 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2010-08-05 21:40:16 +0200 |
commit | 84f888a5b3640dffdff1ecd1e19e4ba6aa3ed6af (patch) | |
tree | 03d50c34b873780c1373257497bd046eac25f044 /src | |
parent | 74cbdf0334ffadf335082990464719e12cef22d3 (diff) |
Fix a few problems for :find completion. Test much more. (Nazri Ramliy)
Diffstat (limited to 'src')
-rw-r--r-- | src/ex_getln.c | 13 | ||||
-rw-r--r-- | src/misc1.c | 2 | ||||
-rw-r--r-- | src/testdir/test73.in | 84 | ||||
-rw-r--r-- | src/testdir/test73.ok | 8 |
4 files changed, 97 insertions, 10 deletions
diff --git a/src/ex_getln.c b/src/ex_getln.c index 790d5315a0..8a18a4cce7 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -5045,15 +5045,16 @@ globpath(path, file, expand_options) { /* Copy one item of the path to buf[] and concatenate the file name. */ copy_option_part(&path, buf, MAXPATHL, ","); - if (path_with_url(buf)) - continue; - /* - * FIXME: should we proactively skip 'path' with limiter (/usr/ **N) - * and upward search (;) notations, just like we did with url above? - */ if (STRLEN(buf) + STRLEN(file) + 2 < MAXPATHL) { +# ifdef WIN3264 + /* Using the platform's path separator (\) makes vim incorrectly + * treat it as an escape character, use '/' instead. */ + if (*buf != NUL && !after_pathsep(buf, buf + STRLEN(buf))) + STRCAT(buf, "/"); +# else add_pathsep(buf); +# endif STRCAT(buf, file); if (ExpandFromContext(&xpc, buf, &num_p, &p, WILD_SILENT|expand_options) != FAIL && num_p > 0) diff --git a/src/misc1.c b/src/misc1.c index c8fb8eb3fa..ef7c10c5e9 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -9337,6 +9337,8 @@ expand_path_option(curdir, gap) } else if (buf[0] == NUL) /* relative to current directory */ STRCPY(buf, curdir); + else if (path_with_url(buf)) + continue; else if (!mch_isFullName(buf)) { /* Expand relative path to their full path equivalent */ diff --git a/src/testdir/test73.in b/src/testdir/test73.in index 8928aeb2d6..706c379e7c 100644 --- a/src/testdir/test73.in +++ b/src/testdir/test73.in @@ -1,23 +1,99 @@ Tests for find completion. STARTTEST +:" Do all test in a separate window to avoid E211 when we recursively +:" delete the Xfind directory during cleanup +:" +:" This will cause a few errors, do it silently. +:set visualbell +:" +:function! DeleteDirectory(dir) +: if has("win16") || has("win32") || has("win64") +: exec "silent !rmdir /Q /S " . a:dir +: else +: exec "silent !rm -rf " . a:dir +: endif +:endfun +:" On windows a stale "Xfind" directory may exist, remove it so that +:" we start from a clean state. +:call DeleteDirectory("Xfind") +:set nocp +:new +:let cwd=getcwd() :!mkdir Xfind -:!mkdir Xfind/in -:!mkdir Xfind/in/path +:cd Xfind +:set path= +:find +:w! ../test.out +:close +:new +:set path=. +:find +:w >>../test.out +:close +:new +:set path=.,, +:find +:w >>../test.out +:close +:new +:set path=./** +:find +:w >>../test.out +:close +:new +:" We shouldn't find any file at this point, ../test.out must be empty. +:!mkdir in +:cd in +:!mkdir path +:exec "cd " . cwd :e Xfind/file.txt SHoly Grail:w :e Xfind/in/file.txt SJimmy Hoffa:w +:e Xfind/in/stuff.txt +SAnother Holy Grail:w :e Xfind/in/path/file.txt SE.T.:w :set path=Xfind/** -:set nocp :find file -:w! test.out +:w >> test.out +:find file +:w >>test.out +:find file +:w >>test.out +:" Rerun the previous three find completions, using fullpath in 'path' +:exec "set path=" . cwd . "/Xfind/**" +:find file +:w >> test.out :find file :w >>test.out :find file :w >>test.out +:" Same steps again, using relative and fullpath items that point to the same +:" recursive location. +:" This is to test that there are no duplicates in the completion list. +:exec "set path+=Xfind/**" +:find file +:w >> test.out +:find file +:w >>test.out +:find file +:w >>test.out +:find file +:" Test find completion for directory of current buffer, which at this point +:" is Xfind/in/file.txt. +:set path=. +:find st +:w >> test.out +:" Test find completion for empty path item ",," which is the current directory +:cd Xfind +:set path=,, +:find f +:w >> ../test.out +:cd .. +:q +:call DeleteDirectory("Xfind") :qa! ENDTEST diff --git a/src/testdir/test73.ok b/src/testdir/test73.ok index bf1d43359c..cd787f23a3 100644 --- a/src/testdir/test73.ok +++ b/src/testdir/test73.ok @@ -1,3 +1,11 @@ Holy Grail Jimmy Hoffa E.T. +Holy Grail +Jimmy Hoffa +E.T. +Holy Grail +Jimmy Hoffa +E.T. +Another Holy Grail +Holy Grail |