Mercurial > vim
diff src/evalfunc.c @ 16833:6699c03347d2 v8.1.1418
patch 8.1.1418: win_execute() is not implemented yet
commit https://github.com/vim/vim/commit/868b7b6712ea4f2232eeeae18c5cbbbddf2ee84d
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed May 29 21:44:40 2019 +0200
patch 8.1.1418: win_execute() is not implemented yet
Problem: Win_execute() is not implemented yet.
Solution: Implement it.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 29 May 2019 21:45:05 +0200 |
parents | 5cebaecad422 |
children | cf630fab9fb6 |
line wrap: on
line diff
--- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -492,6 +492,7 @@ static void f_values(typval_T *argvars, static void f_virtcol(typval_T *argvars, typval_T *rettv); static void f_visualmode(typval_T *argvars, typval_T *rettv); static void f_wildmenumode(typval_T *argvars, typval_T *rettv); +static void f_win_execute(typval_T *argvars, typval_T *rettv); static void f_win_findbuf(typval_T *argvars, typval_T *rettv); static void f_win_getid(typval_T *argvars, typval_T *rettv); static void f_win_gotoid(typval_T *argvars, typval_T *rettv); @@ -1045,6 +1046,7 @@ static struct fst {"virtcol", 1, 1, f_virtcol}, {"visualmode", 0, 1, f_visualmode}, {"wildmenumode", 0, 0, f_wildmenumode}, + {"win_execute", 2, 3, f_win_execute}, {"win_findbuf", 1, 1, f_win_findbuf}, {"win_getid", 0, 2, f_win_getid}, {"win_gotoid", 1, 1, f_win_gotoid}, @@ -3519,7 +3521,7 @@ get_list_line( * "execute()" function */ static void -f_execute(typval_T *argvars, typval_T *rettv) +execute_common(typval_T *argvars, typval_T *rettv, int arg_off) { char_u *cmd = NULL; list_T *list = NULL; @@ -3535,9 +3537,9 @@ f_execute(typval_T *argvars, typval_T *r rettv->vval.v_string = NULL; rettv->v_type = VAR_STRING; - if (argvars[0].v_type == VAR_LIST) - { - list = argvars[0].vval.v_list; + if (argvars[arg_off].v_type == VAR_LIST) + { + list = argvars[arg_off].vval.v_list; if (list == NULL || list->lv_first == NULL) /* empty list, no commands, empty output */ return; @@ -3545,15 +3547,15 @@ f_execute(typval_T *argvars, typval_T *r } else { - cmd = tv_get_string_chk(&argvars[0]); + cmd = tv_get_string_chk(&argvars[arg_off]); if (cmd == NULL) return; } - if (argvars[1].v_type != VAR_UNKNOWN) + if (argvars[arg_off + 1].v_type != VAR_UNKNOWN) { char_u buf[NUMBUFLEN]; - char_u *s = tv_get_string_buf_chk(&argvars[1], buf); + char_u *s = tv_get_string_buf_chk(&argvars[arg_off + 1], buf); if (s == NULL) return; @@ -3621,6 +3623,15 @@ f_execute(typval_T *argvars, typval_T *r } /* + * "execute()" function + */ + static void +f_execute(typval_T *argvars, typval_T *rettv) +{ + execute_common(argvars, rettv, 0); +} + +/* * "exepath()" function */ static void @@ -6097,6 +6108,30 @@ f_getwininfo(typval_T *argvars, typval_T } /* + * "win_execute()" function + */ + static void +f_win_execute(typval_T *argvars, typval_T *rettv) +{ + int id = (int)tv_get_number(argvars); + win_T *wp = win_id2wp(id); + win_T *save_curwin = curwin; + + if (wp != NULL) + { + curwin = wp; + curbuf = curwin->w_buffer; + check_cursor(); + execute_common(argvars, rettv, 1); + if (win_valid(save_curwin)) + { + curwin = save_curwin; + curbuf = curwin->w_buffer; + } + } +} + +/* * "win_findbuf()" function */ static void