aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval/funcs.c
diff options
context:
space:
mode:
authorjing <lhchenjw@gmail.com>2021-05-01 10:00:41 +0800
committerjing <lhchenjw@gmail.com>2021-05-06 23:45:16 +0800
commit97abf8ee63994c19c2119e34bc7a7aa66457a7f2 (patch)
treee21e98c3509e2f6018c8fb985d202a1ef4ae2953 /src/nvim/eval/funcs.c
parentf6518e55164be3fd2d10bf7738c5d76970fb8d79 (diff)
downloadrneovim-97abf8ee63994c19c2119e34bc7a7aa66457a7f2.tar.gz
rneovim-97abf8ee63994c19c2119e34bc7a7aa66457a7f2.tar.bz2
rneovim-97abf8ee63994c19c2119e34bc7a7aa66457a7f2.zip
vim-patch:8.1.1425: win_execute() does not set window pointers properly
Problem: Win_execute() does not set window pointers properly. Solution: Use switch_win_noblock(). Also execute autocommands in a popup window. https://github.com/vim/vim/commit/89adc3a1371d211f7766f3dbc0975ecb2f862327
Diffstat (limited to 'src/nvim/eval/funcs.c')
-rw-r--r--src/nvim/eval/funcs.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c
index fe0a4c29a2..3a202759b6 100644
--- a/src/nvim/eval/funcs.c
+++ b/src/nvim/eval/funcs.c
@@ -2042,17 +2042,16 @@ static void f_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);
- win_T *save_curwin = curwin;
+ win_T *save_curwin;
+ tabpage_T *save_curtab;
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;
+ if (switch_win_noblock(&save_curwin, &save_curtab, wp, curtab, true) ==
+ OK) {
+ check_cursor();
+ execute_common(argvars, rettv, fptr, 1);
}
+ restore_win_noblock(save_curwin, save_curtab, true);
}
}