Fixes for :find completion.

This commit is contained in:
Bram Moolenaar
2010-08-11 22:05:57 +02:00
parent 0ee8df9ce5
commit 9bc040c8e1
2 changed files with 33 additions and 4 deletions

View File

@ -9457,6 +9457,7 @@ uniquefy_paths(gap, pattern)
char_u *path = fnames[i]; char_u *path = fnames[i];
int is_in_curdir; int is_in_curdir;
char_u *dir_end = gettail(path); char_u *dir_end = gettail(path);
char_u *short_name;
len = (int)STRLEN(path); len = (int)STRLEN(path);
while (dir_end > path && while (dir_end > path &&
@ -9475,12 +9476,17 @@ uniquefy_paths(gap, pattern)
* and it is not unique, * and it is not unique,
* reduce it to ./{filename} * reduce it to ./{filename}
* FIXME ^ Is this portable? * FIXME ^ Is this portable?
*
* Note: If the full filename is /curdir/foo/bar/{filename}, we don't
* want to shorten it to ./foo/bar/{filename} yet because 'path' might
* contain ". / * *", in which case the shortened filename could be
* shorter than ./foo/bar/{filename}.
*/ */
if (is_in_curdir) if (is_in_curdir)
{ {
char_u *rel_path; char_u *rel_path;
char_u *short_name = shorten_fname(path, curdir);
short_name = shorten_fname(path, curdir);
if (short_name == NULL) if (short_name == NULL)
short_name = path; short_name = path;
if (is_unique(short_name, gap, i)) if (is_unique(short_name, gap, i))
@ -9533,6 +9539,29 @@ uniquefy_paths(gap, pattern)
break; break;
} }
} }
if (mch_isFullName(path))
{
/*
* Last resort: shorten relative to curdir if possible.
* 'possible' means:
* 1. It is under the current directory.
* 2. The result is actually shorter than the original.
*
* Before curdir After
* /foo/bar/file.txt /foo/bar ./file.txt
* c:\foo\bar\file.txt c:\foo\bar .\file.txt
* /file.txt / /file.txt
* c:\file.txt c:\ .\file.txt
*/
short_name = shorten_fname(path, curdir);
if (short_name != NULL && short_name > path + 1)
{
STRCPY(path, ".");
add_pathsep(path);
STRCAT(path, short_name);
}
}
} }
theend: theend:
@ -9711,7 +9740,7 @@ gen_expand_wildcards(num_pat, pat, num_file, file, flags)
/* /*
* First expand environment variables, "~/" and "~user/". * First expand environment variables, "~/" and "~user/".
*/ */
if (vim_strpbrk(p, (char_u *)"$~") != NULL) if (vim_strchr(p, '$') != NULL || *p == '~')
{ {
p = expand_env_save_opt(p, TRUE); p = expand_env_save_opt(p, TRUE);
if (p == NULL) if (p == NULL)
@ -9722,7 +9751,7 @@ gen_expand_wildcards(num_pat, pat, num_file, file, flags)
* variable, use the shell to do that. Discard previously * variable, use the shell to do that. Discard previously
* found file names and start all over again. * found file names and start all over again.
*/ */
else if (vim_strpbrk(p, (char_u *)"$~") != NULL) else if (vim_strchr(p, '$') != NULL || *p == '~')
{ {
vim_free(p); vim_free(p);
ga_clear_strings(&ga); ga_clear_strings(&ga);

View File

@ -9,7 +9,7 @@ STARTTEST
:set nocp viminfo+=nviminfo visualbell :set nocp viminfo+=nviminfo visualbell
:" :"
:function! DeleteDirectory(dir) :function! DeleteDirectory(dir)
: if has("win16") || has("win32") || has("win64") : if has("win16") || has("win32") || has("win64") || has("dos16") || has("dos32")
: exec "silent !rmdir /Q /S " . a:dir : exec "silent !rmdir /Q /S " . a:dir
: else : else
: exec "silent !rm -rf " . a:dir : exec "silent !rm -rf " . a:dir