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
|
// "win_execute(win_id, command)" function
|
||||||
static void f_win_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
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;
|
win_T *save_curwin;
|
||||||
tabpage_T *save_curtab;
|
tabpage_T *save_curtab;
|
||||||
|
|
||||||
if (wp != NULL) {
|
if (wp != NULL && tp != NULL) {
|
||||||
if (switch_win_noblock(&save_curwin, &save_curtab, wp, curtab, true) ==
|
if (switch_win_noblock(&save_curwin, &save_curtab, wp, tp, true) ==
|
||||||
OK) {
|
OK) {
|
||||||
check_cursor();
|
check_cursor();
|
||||||
execute_common(argvars, rettv, fptr, 1);
|
execute_common(argvars, rettv, fptr, 1);
|
||||||
|
@@ -104,3 +104,12 @@ func Test_win_execute()
|
|||||||
call win_gotoid(otherwin)
|
call win_gotoid(otherwin)
|
||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
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)
|
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]);
|
int id = tv_get_number(&argvars[0]);
|
||||||
|
|
||||||
FOR_ALL_TAB_WINDOWS(tp, wp) {
|
FOR_ALL_TAB_WINDOWS(tp, wp) {
|
||||||
if (wp->handle == id) {
|
if (wp->handle == id) {
|
||||||
|
if (tpp != NULL) {
|
||||||
|
*tpp = tp;
|
||||||
|
}
|
||||||
return wp;
|
return wp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user