mirror of
https://github.com/neovim/neovim.git
synced 2025-09-20 18:28:19 +00:00
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:
@@ -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);
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user