mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 9.1.0498: getcmdcompltype() interferes with cmdline completion
Problem: getcmdcompltype() interferes with cmdline completion. Solution: Don't set expand context when it's already set. (zeertzjq) closes: #15036 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
parent
a48637c105
commit
a821b609f9
@ -4176,6 +4176,7 @@ get_cmdline_completion(void)
|
|||||||
{
|
{
|
||||||
cmdline_info_T *p;
|
cmdline_info_T *p;
|
||||||
char_u *buffer;
|
char_u *buffer;
|
||||||
|
int xp_context;
|
||||||
|
|
||||||
if (cmdline_star > 0)
|
if (cmdline_star > 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -4184,15 +4185,21 @@ get_cmdline_completion(void)
|
|||||||
if (p == NULL || p->xpc == NULL)
|
if (p == NULL || p->xpc == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
set_expand_context(p->xpc);
|
xp_context = p->xpc->xp_context;
|
||||||
if (p->xpc->xp_context == EXPAND_UNSUCCESSFUL)
|
if (xp_context == EXPAND_NOTHING)
|
||||||
|
{
|
||||||
|
set_expand_context(p->xpc);
|
||||||
|
xp_context = p->xpc->xp_context;
|
||||||
|
p->xpc->xp_context = EXPAND_NOTHING;
|
||||||
|
}
|
||||||
|
if (xp_context == EXPAND_UNSUCCESSFUL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
char_u *cmd_compl = cmdcomplete_type_to_str(p->xpc->xp_context);
|
char_u *cmd_compl = cmdcomplete_type_to_str(xp_context);
|
||||||
if (cmd_compl == NULL)
|
if (cmd_compl == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (p->xpc->xp_context == EXPAND_USER_LIST || p->xpc->xp_context == EXPAND_USER_DEFINED)
|
if (xp_context == EXPAND_USER_LIST || xp_context == EXPAND_USER_DEFINED)
|
||||||
{
|
{
|
||||||
buffer = alloc(STRLEN(cmd_compl) + STRLEN(p->xpc->xp_arg) + 2);
|
buffer = alloc(STRLEN(cmd_compl) + STRLEN(p->xpc->xp_arg) + 2);
|
||||||
if (buffer == NULL)
|
if (buffer == NULL)
|
||||||
|
@ -3612,7 +3612,7 @@ func Test_cmdline_complete_bang_cmd_argument()
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Call_cmd_funcs()
|
func Call_cmd_funcs()
|
||||||
return string([getcmdpos(), getcmdscreenpos(), getcmdcompltype()])
|
return [getcmdpos(), getcmdscreenpos(), getcmdcompltype()]
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_screenpos_and_completion()
|
func Test_screenpos_and_completion()
|
||||||
@ -3620,13 +3620,24 @@ func Test_screenpos_and_completion()
|
|||||||
call assert_equal(0, getcmdscreenpos())
|
call assert_equal(0, getcmdscreenpos())
|
||||||
call assert_equal('', getcmdcompltype())
|
call assert_equal('', getcmdcompltype())
|
||||||
|
|
||||||
cnoremap <expr> <F2> string([getcmdpos(), getcmdscreenpos(), getcmdcompltype()])
|
cnoremap <expr> <F2> string(Call_cmd_funcs())
|
||||||
call feedkeys(":let a\<F2>\<C-B>\"\<CR>", "xt")
|
call feedkeys(":let a\<F2>\<C-B>\"\<CR>", "xt")
|
||||||
call assert_equal("\"let a[6, 7, 'var']", @:)
|
call assert_equal("\"let a[6, 7, 'var']", @:)
|
||||||
call feedkeys(":quit \<F2>\<C-B>\"\<CR>", "xt")
|
call feedkeys(":quit \<F2>\<C-B>\"\<CR>", "xt")
|
||||||
call assert_equal("\"quit [6, 7, '']", @:)
|
call assert_equal("\"quit [6, 7, '']", @:)
|
||||||
call feedkeys(":nosuchcommand \<F2>\<C-B>\"\<CR>", "xt")
|
call feedkeys(":nosuchcommand \<F2>\<C-B>\"\<CR>", "xt")
|
||||||
call assert_equal("\"nosuchcommand [15, 16, '']", @:)
|
call assert_equal("\"nosuchcommand [15, 16, '']", @:)
|
||||||
|
|
||||||
|
" Check that getcmdcompltype() doesn't interfere with cmdline completion.
|
||||||
|
let g:results = []
|
||||||
|
cnoremap <F2> <Cmd>let g:results += [[getcmdline()] + Call_cmd_funcs()]<CR>
|
||||||
|
call feedkeys(":sign un\<Tab>\<F2>\<Tab>\<F2>\<Tab>\<F2>\<C-C>", "xt")
|
||||||
|
call assert_equal([
|
||||||
|
\ ['sign undefine', 14, 15, 'sign'],
|
||||||
|
\ ['sign unplace', 13, 14, 'sign'],
|
||||||
|
\ ['sign un', 8, 9, 'sign']], g:results)
|
||||||
|
|
||||||
|
unlet g:results
|
||||||
cunmap <F2>
|
cunmap <F2>
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
@ -704,6 +704,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 */
|
||||||
|
/**/
|
||||||
|
498,
|
||||||
/**/
|
/**/
|
||||||
497,
|
497,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user