static void * call_user_expand_func __ARGS((void *(*user_expand_func) __ARGS((char_u *, int, char_u **, int)), expand_T *xp, int *num_file, char_u ***file));
/*
- * call "user_expand_func()" to invoke a user defined VimL function and return
+ * Call "user_expand_func()" to invoke a user defined VimL function and return
* the result (either a string or a List).
*/
static void *
*num_file = 0;
*file = NULL;
- keep = ccline.cmdbuff[ccline.cmdlen];
- ccline.cmdbuff[ccline.cmdlen] = 0;
- sprintf((char *)num, "%d", ccline.cmdpos);
+ if (ccline.cmdbuff == NULL)
+ {
+ /* Completion from Insert mode, pass fake arguments. */
+ keep = 0;
+ sprintf((char *)num, "%d", STRLEN(xp->xp_pattern));
+ args[1] = xp->xp_pattern;
+ }
+ else
+ {
+ /* Completion on the command line, pass real arguments. */
+ keep = ccline.cmdbuff[ccline.cmdlen];
+ ccline.cmdbuff[ccline.cmdlen] = 0;
+ sprintf((char *)num, "%d", ccline.cmdpos);
+ args[1] = ccline.cmdbuff;
+ }
args[0] = xp->xp_pattern;
- args[1] = ccline.cmdbuff;
args[2] = num;
/* Save the cmdline, we don't know what the function may do. */
ccline = save_ccline;
current_SID = save_current_SID;
-
- ccline.cmdbuff[ccline.cmdlen] = keep;
+ if (ccline.cmdbuff != NULL)
+ ccline.cmdbuff[ccline.cmdlen] = keep;
return ret;
}