1
0
forked from aniani/vim

Improvements for :find completion. (Nazri Ramliy)

This commit is contained in:
Bram Moolenaar 2010-08-02 21:33:37 +02:00
parent bbdcb4848a
commit bdc975cdfe

View File

@ -9317,6 +9317,7 @@ expand_path_option(curdir, gap)
char_u *path_option = *curbuf->b_p_path == NUL char_u *path_option = *curbuf->b_p_path == NUL
? p_path : curbuf->b_p_path; ? p_path : curbuf->b_p_path;
char_u *buf; char_u *buf;
char_u *p;
ga_init2(gap, (int)sizeof(char_u *), 1); ga_init2(gap, (int)sizeof(char_u *), 1);
@ -9350,7 +9351,12 @@ expand_path_option(curdir, gap)
STRMOVE(buf + curdir_len, buf + curdir_len + 1); STRMOVE(buf + curdir_len, buf + curdir_len + 1);
} }
addfile(gap, buf, EW_NOTFOUND|EW_DIR|EW_FILE); if (ga_grow(gap, 1) == FAIL)
break;
p = vim_strsave(buf);
if (p == NULL)
break;
((char_u **)gap->ga_data)[gap->ga_len++] = p;
} }
vim_free(buf); vim_free(buf);
@ -9378,8 +9384,11 @@ get_path_cutoff(fname, gap)
{ {
int j = 0; int j = 0;
while (fname[j] == path_part[i][j] && fname[j] != NUL while ((fname[j] == path_part[i][j]
&& path_part[i][j] != NUL) #if defined(WIN3264)
|| (vim_ispathsep(fname[j]) && vim_ispathsep(path_part[i][j]))
#endif
) && fname[j] != NUL && path_part[i][j] != NUL)
j++; j++;
if (j > maxlen) if (j > maxlen)
{ {
@ -9389,8 +9398,15 @@ get_path_cutoff(fname, gap)
} }
/* Skip to the file or directory name */ /* Skip to the file or directory name */
while (cutoff != NULL && vim_ispathsep(*cutoff) && *cutoff != NUL) if (cutoff != NULL)
mb_ptr_adv(cutoff); while (
#if defined(WIN3264)
*cutoff == '/'
#else
vim_ispathsep(*cutoff)
#endif
)
mb_ptr_adv(cutoff);
return cutoff; return cutoff;
} }
@ -9454,7 +9470,13 @@ uniquefy_paths(gap, pattern)
char_u *dir_end = gettail(path); char_u *dir_end = gettail(path);
len = (int)STRLEN(path); len = (int)STRLEN(path);
while (dir_end > path && !vim_ispathsep(*dir_end)) while (dir_end > path &&
#if defined(WIN3264)
*dir_end != '/'
#else
!vim_ispathsep(*dir_end)
#endif
)
mb_ptr_back(path, dir_end); mb_ptr_back(path, dir_end);
is_in_curdir = STRNCMP(curdir, path, dir_end - path) == 0 is_in_curdir = STRNCMP(curdir, path, dir_end - path) == 0
&& curdir[dir_end - path] == NUL; && curdir[dir_end - path] == NUL;
@ -9537,8 +9559,8 @@ theend:
} }
/* /*
* Calls globpath with 'path' values for the given pattern and stores * Calls globpath() or mch_expandpath() with 'path' values for the given
* the result in gap. * pattern and stores the result in gap.
* Returns the total number of matches. * Returns the total number of matches.
*/ */
static int static int
@ -9547,15 +9569,18 @@ expand_in_path(gap, pattern, flags)
char_u *pattern; char_u *pattern;
int flags; /* EW_* flags */ int flags; /* EW_* flags */
{ {
int c = 0;
char_u *files = NULL;
char_u *s; /* start */
char_u *e; /* end */
char_u *paths = NULL;
char_u **path_list; char_u **path_list;
char_u *curdir; char_u *curdir;
garray_T path_ga; garray_T path_ga;
int i; int i;
# ifdef WIN3264
char_u *file_pattern;
# else
char_u *files = NULL;
char_u *s; /* start */
char_u *e; /* end */
char_u *paths = NULL;
# endif
if ((curdir = alloc((int)(MAXPATHL))) == NULL) if ((curdir = alloc((int)(MAXPATHL))) == NULL)
return 0; return 0;
@ -9564,6 +9589,17 @@ expand_in_path(gap, pattern, flags)
expand_path_option(curdir, &path_ga); expand_path_option(curdir, &path_ga);
vim_free(curdir); vim_free(curdir);
path_list = (char_u **)(path_ga.ga_data); path_list = (char_u **)(path_ga.ga_data);
# ifdef WIN3264
for (i = 0; i < path_ga.ga_len; i++)
{
if (STRLEN(path_list[i]) + STRLEN(pattern) + 2 > MAXPATHL)
continue;
STRCPY(file_pattern, path_list[i]);
STRCAT(file_pattern, "/");
STRCAT(file_pattern, pattern);
mch_expandpath(gap, file_pattern, EW_DIR|EW_ADDSLASH|EW_FILE);
}
# else
for (i = 0; i < path_ga.ga_len; i++) for (i = 0; i < path_ga.ga_len; i++)
{ {
if (paths == NULL) if (paths == NULL)
@ -9609,10 +9645,10 @@ expand_in_path(gap, pattern, flags)
} }
} }
c = gap->ga_len;
vim_free(files); vim_free(files);
# endif
return c; return gap->ga_len;
} }
#endif #endif