mirror of
https://github.com/neovim/neovim.git
synced 2025-09-10 21:38:19 +00:00
vim-patch:8.1.1418: win_execute() is not implemented yet
Problem: Win_execute() is not implemented yet.
Solution: Implement it.
868b7b6712
This commit is contained in:
@@ -1953,8 +1953,8 @@ static char_u *get_list_line(int c, void *cookie, int indent, bool do_concat)
|
||||
return (char_u *)(s == NULL ? NULL : xstrdup(s));
|
||||
}
|
||||
|
||||
// "execute(command)" function
|
||||
static void f_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
static void execute_common(typval_T *argvars, typval_T *rettv, FunPtr fptr,
|
||||
int arg_off)
|
||||
{
|
||||
const int save_msg_silent = msg_silent;
|
||||
const int save_emsg_silent = emsg_silent;
|
||||
@@ -1968,9 +1968,9 @@ static void f_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
return;
|
||||
}
|
||||
|
||||
if (argvars[1].v_type != VAR_UNKNOWN) {
|
||||
if (argvars[arg_off + 1].v_type != VAR_UNKNOWN) {
|
||||
char buf[NUMBUFLEN];
|
||||
const char *const s = tv_get_string_buf_chk(&argvars[1], buf);
|
||||
const char *const s = tv_get_string_buf_chk(&argvars[arg_off + 1], buf);
|
||||
|
||||
if (s == NULL) {
|
||||
return;
|
||||
@@ -1997,10 +1997,10 @@ static void f_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
msg_col = 0; // prevent leading spaces
|
||||
}
|
||||
|
||||
if (argvars[0].v_type != VAR_LIST) {
|
||||
do_cmdline_cmd(tv_get_string(&argvars[0]));
|
||||
} else if (argvars[0].vval.v_list != NULL) {
|
||||
list_T *const list = argvars[0].vval.v_list;
|
||||
if (argvars[arg_off].v_type != VAR_LIST) {
|
||||
do_cmdline_cmd(tv_get_string(&argvars[arg_off]));
|
||||
} else if (argvars[arg_off].vval.v_list != NULL) {
|
||||
list_T *const list = argvars[arg_off].vval.v_list;
|
||||
tv_list_ref(list);
|
||||
GetListLineCookie cookie = {
|
||||
.l = list,
|
||||
@@ -2032,6 +2032,30 @@ static void f_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
capture_ga = save_capture_ga;
|
||||
}
|
||||
|
||||
// "execute(command)" function
|
||||
static void f_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
{
|
||||
execute_common(argvars, rettv, fptr, 0);
|
||||
}
|
||||
|
||||
// "win_execute(win_id, command)" function
|
||||
static void f_win_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
{
|
||||
win_T *wp = win_id2wp(argvars);
|
||||
win_T *save_curwin = curwin;
|
||||
|
||||
if (wp != NULL) {
|
||||
curwin = wp;
|
||||
curbuf = curwin->w_buffer;
|
||||
check_cursor();
|
||||
execute_common(argvars, rettv, fptr, 1);
|
||||
if (win_valid(save_curwin)) {
|
||||
curwin = save_curwin;
|
||||
curbuf = curwin->w_buffer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// "exepath()" function
|
||||
static void f_exepath(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
{
|
||||
|
Reference in New Issue
Block a user