Patch 8.2.4482
Problem:No fuzzy cmdline completion for user defined completion.
Solution: Add fuzzy completion for user defined completion. (Yegappan
Lakshmanan, closes #9858)
Files: src/cmdexpand.c, src/testdir/test_cmdline.vim
*** ../vim-8.2.4481/src/cmdexpand.c 2022-02-27 14:28:13.183994838 +
--- src/cmdexpand.c 2022-02-27 20:16:41.714037903 +
***
*** 16,30
static intcmd_showtail; // Only show path tail in lists ?
static void set_expand_context(expand_T *xp);
! static int ExpandGeneric(expand_T *xp, regmatch_T *regmatch,
char_u ***matches, int *numMatches,
! char_u *((*func)(expand_T *, int)), int escaped,
! char_u *fuzzystr);
static intExpandFromContext(expand_T *xp, char_u *, char_u ***, int *,
int);
static intexpand_showtail(expand_T *xp);
static intexpand_shellcmd(char_u *filepat, char_u ***matches, int
*numMatches, int flagsarg);
#if defined(FEAT_EVAL)
! static intExpandUserDefined(expand_T *xp, regmatch_T *regmatch, char_u
***matches, int *numMatches);
static intExpandUserList(expand_T *xp, char_u ***matches, int
*numMatches);
#endif
--- 16,29
static intcmd_showtail; // Only show path tail in lists ?
static void set_expand_context(expand_T *xp);
! static int ExpandGeneric(char_u *pat, expand_T *xp, regmatch_T *regmatch,
char_u ***matches, int *numMatches,
! char_u *((*func)(expand_T *, int)), int escaped);
static intExpandFromContext(expand_T *xp, char_u *, char_u ***, int *,
int);
static intexpand_showtail(expand_T *xp);
static intexpand_shellcmd(char_u *filepat, char_u ***matches, int
*numMatches, int flagsarg);
#if defined(FEAT_EVAL)
! static intExpandUserDefined(char_u *pat, expand_T *xp, regmatch_T
*regmatch, char_u ***matches, int *numMatches);
static intExpandUserList(expand_T *xp, char_u ***matches, int
*numMatches);
#endif
***
*** 62,74
&& xp->xp_context != EXPAND_SHELLCMD
&& xp->xp_context != EXPAND_TAGS
&& xp->xp_context != EXPAND_TAGS_LISTFILES
- && xp->xp_context != EXPAND_USER_DEFINED
&& xp->xp_context != EXPAND_USER_LIST);
}
/*
* Returns TRUE if fuzzy completion for cmdline completion is enabled and
! * 'fuzzystr' is not empty.
*/
int
cmdline_fuzzy_complete(char_u *fuzzystr)
--- 61,73
&& xp->xp_context != EXPAND_SHELLCMD
&& xp->xp_context != EXPAND_TAGS
&& xp->xp_context != EXPAND_TAGS_LISTFILES
&& xp->xp_context != EXPAND_USER_LIST);
}
/*
* Returns TRUE if fuzzy completion for cmdline completion is enabled and
! * 'fuzzystr' is not empty. If search pattern is empty, then don't use fuzzy
! * matching.
*/
int
cmdline_fuzzy_complete(char_u *fuzzystr)
***
*** 2444,2459
{
if (xp->xp_context == tab[i].context)
{
- // Use fuzzy matching if 'wildoptions' has 'fuzzy'.
- // If no search pattern is supplied, then don't use fuzzy
- // matching and return all the found items.
- int fuzzy = cmdline_fuzzy_complete(pat);
-
if (tab[i].ic)
rmp->rm_ic = TRUE;
! ret = ExpandGeneric(xp, rmp, matches, numMatches,
! tab[i].func, tab[i].escaped,
! fuzzy ? pat : NULL);
break;
}
}
--- 2443,2452
{
if (xp->xp_context == tab[i].context)
{
if (tab[i].ic)
rmp->rm_ic = TRUE;
! ret = ExpandGeneric(pat, xp, rmp, matches, numMatches,
! tab[i].func, tab[i].escaped);
break;
}
}
***
*** 2604,2610
ret = ExpandMappings(pat, , numMatches, matches);
# if defined(FEAT_EVAL)
else if (xp->xp_context == EXPAND_USER_DEFINED)
! ret = ExpandUserDefined(xp, , matches, numMatches);
# endif
else
ret = ExpandOther(pat, xp, , matches, numMatches);
--- 2597,2603
ret = ExpandMappings(pat, , numMatches, matches);
# if defined(FEAT_EVAL)
else if (xp->xp_context == EXPAND_USER_DEFINED)
! ret = ExpandUserDefined(pat, xp, , matches, numMatches);
# endif
else
ret = ExpandOther(pat, xp, , matches, numMatches);
***
*** 2630,2643
*/
static int
ExpandGeneric(
expand_T *xp,
regmatch_T*regmatch,
char_u***matches,
int *numMatches,
char_u*((*func)(expand_T *, int)),