forked from aniani/vim
Improvements for :find completion. (Nazri Ramliy)
This commit is contained in:
parent
bbdcb4848a
commit
bdc975cdfe
66
src/misc1.c
66
src/misc1.c
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user