mirror of
https://github.com/vim/vim.git
synced 2025-10-01 04:54:07 -04:00
patch 9.0.0140: execute() does not use the "legacy" command modifier
Problem: execute() does not use the "legacy" command modifier. Solution: pass the command modifier in sticky_cmdmod_flags. (Kota Kato, closes #10845)
This commit is contained in:
committed by
Bram Moolenaar
parent
398649ee44
commit
3d3f6ac098
@@ -3929,6 +3929,7 @@ execute_common(typval_T *argvars, typval_T *rettv, int arg_off)
|
||||
int save_redir_off = redir_off;
|
||||
garray_T save_ga;
|
||||
int save_msg_col = msg_col;
|
||||
int save_sticky_cmdmod_flags = sticky_cmdmod_flags;
|
||||
int echo_output = FALSE;
|
||||
|
||||
rettv->vval.v_string = NULL;
|
||||
@@ -3985,6 +3986,9 @@ execute_common(typval_T *argvars, typval_T *rettv, int arg_off)
|
||||
if (!echo_output)
|
||||
msg_col = 0; // prevent leading spaces
|
||||
|
||||
// For "legacy call execute('cmd')" and "vim9cmd execute('cmd')" apply the
|
||||
// command modifiers to "cmd".
|
||||
sticky_cmdmod_flags = cmdmod.cmod_flags & (CMOD_LEGACY | CMOD_VIM9CMD);
|
||||
if (cmd != NULL)
|
||||
do_cmdline_cmd(cmd);
|
||||
else
|
||||
@@ -3997,6 +4001,7 @@ execute_common(typval_T *argvars, typval_T *rettv, int arg_off)
|
||||
DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT|DOCMD_KEYTYPED);
|
||||
--list->lv_refcount;
|
||||
}
|
||||
sticky_cmdmod_flags = save_sticky_cmdmod_flags;
|
||||
|
||||
// Need to append a NUL to the result.
|
||||
if (ga_grow(&redir_execute_ga, 1) == OK)
|
||||
|
@@ -142,6 +142,42 @@ def Test_cmdmod_execute()
|
||||
END
|
||||
v9.CheckScriptSuccess(lines)
|
||||
delfunc g:TheFunc
|
||||
|
||||
# vim9cmd execute(cmd) executes code in vim9 script context
|
||||
lines =<< trim END
|
||||
vim9cmd execute("g:vim9executetest = 'bar'")
|
||||
call assert_equal('bar', g:vim9executetest)
|
||||
END
|
||||
v9.CheckScriptSuccess(lines)
|
||||
unlet g:vim9executetest
|
||||
|
||||
lines =<< trim END
|
||||
vim9cmd execute(["g:vim9executetest1 = 'baz'", "g:vim9executetest2 = 'foo'"])
|
||||
call assert_equal('baz', g:vim9executetest1)
|
||||
call assert_equal('foo', g:vim9executetest2)
|
||||
END
|
||||
v9.CheckScriptSuccess(lines)
|
||||
unlet g:vim9executetest1
|
||||
unlet g:vim9executetest2
|
||||
|
||||
# legacy call execute(cmd) executes code in vim script context
|
||||
lines =<< trim END
|
||||
vim9script
|
||||
legacy call execute("let g:vim9executetest = 'bar'")
|
||||
assert_equal('bar', g:vim9executetest)
|
||||
END
|
||||
v9.CheckScriptSuccess(lines)
|
||||
unlet g:vim9executetest
|
||||
|
||||
lines =<< trim END
|
||||
vim9script
|
||||
legacy call execute(["let g:vim9executetest1 = 'baz'", "let g:vim9executetest2 = 'foo'"])
|
||||
assert_equal('baz', g:vim9executetest1)
|
||||
assert_equal('foo', g:vim9executetest2)
|
||||
END
|
||||
v9.CheckScriptSuccess(lines)
|
||||
unlet g:vim9executetest1
|
||||
unlet g:vim9executetest2
|
||||
enddef
|
||||
|
||||
def Test_edit_wildcards()
|
||||
|
@@ -735,6 +735,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
140,
|
||||
/**/
|
||||
139,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user