Fixes for :find completion.
This commit is contained in:
35
src/misc1.c
35
src/misc1.c
@ -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);
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user