# HG changeset patch # User Bram Moolenaar # Date 1281037216 -7200 # Node ID a847363bf06ef9c3aa54dbc853640537103dd75b # Parent ed997d0ceb2674b8fb3d707130647197c5cf8f83 Fix a few problems for :find completion. Test much more. (Nazri Ramliy) diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -1,4 +1,4 @@ -*todo.txt* For Vim version 7.3e. Last change: 2010 Aug 04 +*todo.txt* For Vim version 7.3e. Last change: 2010 Aug 05 VIM REFERENCE MANUAL by Bram Moolenaar @@ -33,8 +33,6 @@ be worked on, but only if you sponsor Vi Before release 7.3: - Rename vim73 branch to default (hints: Xavier de Gaye, 2010 May 23) -test73 doesn't work on MS-Windows. - Better Czech keymap. (Stepnem, 2010 May 4) Use if no response from Jiri Tobisek. @@ -54,6 +52,8 @@ Should readfile() ignore BOM when not in Bug: searching for tags file uses 'suffixesadd', should not happen. (Dominique Pelle, 2010 June 28) +Bug: E685 error for func_unref(). (ZyX, 2010 Aug 5) + When directory "/tmp/tags" contains "tags1" and "tags2", setting 'tags' to "/tmp/tags/*" doesn't pick up these files. (Simon Ruggier, 2010 Mar 17) @@ -257,6 +257,8 @@ There should be a way after an abbreviat was typed. CTRL-G h ? Would also undo last word or line break inserted perhaps. And undo CTRL-W. CTRL-G l would redo. +Diff mode out of sync. (Gary Johnson, 2010 Aug 4) + Win32: A --remote command that has a directory name starting with a ( doesn't work, the backslash is removed, assuming that it escapes the (. (Valery Kondakoff, 2009 May 13) diff --git a/src/ex_getln.c b/src/ex_getln.c --- 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 --- 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 --- 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 --- 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