vim-patch:8.1.1832: win_execute() does not work in other tab

Problem:    Win_execute() does not work in other tab. (Rick Howe)
Solution:   Take care of the tab. (closes vim/vim#4792)
820680b9ff
This commit is contained in:
jing
2021-05-01 10:21:14 +08:00
parent 3c00252248
commit 73154bbae0
3 changed files with 22 additions and 3 deletions

View File

@@ -2041,12 +2041,13 @@ static void f_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr)
// "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);
tabpage_T *tp;
win_T *wp = win_id2wp_tp(argvars, &tp);
win_T *save_curwin;
tabpage_T *save_curtab;
if (wp != NULL) {
if (switch_win_noblock(&save_curwin, &save_curtab, wp, curtab, true) ==
if (wp != NULL && tp != NULL) {
if (switch_win_noblock(&save_curwin, &save_curtab, wp, tp, true) ==
OK) {
check_cursor();
execute_common(argvars, rettv, fptr, 1);

View File

@@ -104,3 +104,12 @@ func Test_win_execute()
call win_gotoid(otherwin)
bwipe!
endfunc
func Test_win_execute_other_tab()
let thiswin = win_getid()
tabnew
call win_execute(thiswin, 'let xyz = 1')
call assert_equal(1, xyz)
tabclose
unlet xyz
endfunc

View File

@@ -6820,11 +6820,20 @@ void win_id2tabwin(typval_T *const argvars, typval_T *const rettv)
}
win_T * win_id2wp(typval_T *argvars)
{
return win_id2wp_tp(argvars, NULL);
}
// Return the window and tab pointer of window "id".
win_T * win_id2wp_tp(typval_T *argvars, tabpage_T **tpp)
{
int id = tv_get_number(&argvars[0]);
FOR_ALL_TAB_WINDOWS(tp, wp) {
if (wp->handle == id) {
if (tpp != NULL) {
*tpp = tp;
}
return wp;
}
}