0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

updated for version 7.3.1260

Problem:    User completion does not get the whole command line in the command
            line window.
Solution:   Pass on the whole command line. (Daniel Thau)
This commit is contained in:
Bram Moolenaar
2013-06-29 12:58:33 +02:00
parent 560c52d32b
commit b751546636
3 changed files with 15 additions and 12 deletions

View File

@@ -3729,6 +3729,7 @@ ExpandInit(xp)
#if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL) #if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
xp->xp_arg = NULL; xp->xp_arg = NULL;
#endif #endif
xp->xp_line = NULL;
} }
/* /*
@@ -4378,6 +4379,11 @@ set_cmd_context(xp, str, len, col)
int old_char = NUL; int old_char = NUL;
char_u *nextcomm; char_u *nextcomm;
/* Store the string here so that call_user_expand_func() can get to them
* easily. */
xp->xp_line = str;
xp->xp_col = col;
/* /*
* Avoid a UMR warning from Purify, only save the character if it has been * Avoid a UMR warning from Purify, only save the character if it has been
* written before. * written before.
@@ -4952,27 +4958,20 @@ call_user_expand_func(user_expand_func, xp, num_file, file)
void *ret; void *ret;
struct cmdline_info save_ccline; struct cmdline_info save_ccline;
if (xp->xp_arg == NULL || xp->xp_arg[0] == '\0') if (xp->xp_arg == NULL || xp->xp_arg[0] == '\0' || xp->xp_line == NULL)
return NULL; return NULL;
*num_file = 0; *num_file = 0;
*file = NULL; *file = NULL;
if (ccline.cmdbuff == NULL) if (ccline.cmdbuff != NULL)
{ {
/* Completion from Insert mode, pass fake arguments. */
keep = 0;
sprintf((char *)num, "%d", (int)STRLEN(xp->xp_pattern));
args[1] = xp->xp_pattern;
}
else
{
/* Completion on the command line, pass real arguments. */
keep = ccline.cmdbuff[ccline.cmdlen]; keep = ccline.cmdbuff[ccline.cmdlen];
ccline.cmdbuff[ccline.cmdlen] = 0; ccline.cmdbuff[ccline.cmdlen] = 0;
sprintf((char *)num, "%d", ccline.cmdpos);
args[1] = ccline.cmdbuff;
} }
args[0] = vim_strnsave(xp->xp_pattern, xp->xp_pattern_len); args[0] = vim_strnsave(xp->xp_pattern, xp->xp_pattern_len);
args[1] = xp->xp_line;
sprintf((char *)num, "%d", xp->xp_col);
args[2] = num; args[2] = num;
/* Save the cmdline, we don't know what the function may do. */ /* Save the cmdline, we don't know what the function may do. */

View File

@@ -493,6 +493,8 @@ typedef struct expand
int xp_numfiles; /* number of files found by int xp_numfiles; /* number of files found by
file name completion */ file name completion */
char_u **xp_files; /* list of files */ char_u **xp_files; /* list of files */
char_u *xp_line; /* text being completed */
int xp_col; /* cursor position in line */
} expand_T; } expand_T;
/* values for xp_backslash */ /* values for xp_backslash */

View File

@@ -728,6 +728,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1260,
/**/ /**/
1259, 1259,
/**/ /**/