summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-09-15 17:26:07 +0200
committerBram Moolenaar <Bram@vim.org>2019-09-15 17:26:07 +0200
commita046b37c22bcabdea5f0fd6d21ca4bd0aa4c768e (patch)
tree3ec383d5a61f2d46b4a354e9ecbc0aa065663e03 /src
parent1ac90b4fa63414d56750559506a3e076df6923b0 (diff)
downloadvim-git-a046b37c22bcabdea5f0fd6d21ca4bd0aa4c768e.tar.gz
patch 8.1.2037: can call win_gotoid() in cmdline windowv8.1.2037
Problem: Can call win_gotoid() in cmdline window. Solution: Disallow switching windows. (Yasuhiro Matsumoto, closes #4940)
Diffstat (limited to 'src')
-rw-r--r--src/evalwindow.c35
-rw-r--r--src/testdir/test_cmdline.vim10
-rw-r--r--src/version.c2
3 files changed, 30 insertions, 17 deletions
diff --git a/src/evalwindow.c b/src/evalwindow.c
index 08bdb9559..6df14c592 100644
--- a/src/evalwindow.c
+++ b/src/evalwindow.c
@@ -50,22 +50,6 @@ win_getid(typval_T *argvars)
return 0;
}
- static int
-win_gotoid(typval_T *argvars)
-{
- win_T *wp;
- tabpage_T *tp;
- int id = tv_get_number(&argvars[0]);
-
- FOR_ALL_TAB_WINDOWS(tp, wp)
- if (wp->w_id == id)
- {
- goto_tabpage_win(tp, wp);
- return 1;
- }
- return 0;
-}
-
static void
win_id2tabwin(typval_T *argvars, list_T *list)
{
@@ -705,7 +689,24 @@ f_win_getid(typval_T *argvars, typval_T *rettv)
void
f_win_gotoid(typval_T *argvars, typval_T *rettv)
{
- rettv->vval.v_number = win_gotoid(argvars);
+ win_T *wp;
+ tabpage_T *tp;
+ int id = tv_get_number(&argvars[0]);
+
+#ifdef FEAT_CMDWIN
+ if (cmdwin_type != 0)
+ {
+ emsg(_(e_cmdwin));
+ return;
+ }
+#endif
+ FOR_ALL_TAB_WINDOWS(tp, wp)
+ if (wp->w_id == id)
+ {
+ goto_tabpage_win(tp, wp);
+ rettv->vval.v_number = 1;
+ return;
+ }
}
/*
diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim
index f8d612565..98768b509 100644
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -734,3 +734,13 @@ func Test_cmdline_overstrike()
let &encoding = encoding_save
endfunc
+
+func Test_cmdwin_bug()
+ let winid = win_getid()
+ sp
+ try
+ call feedkeys("q::call win_gotoid(" .. winid .. ")\<CR>:q\<CR>", 'x!')
+ catch /^Vim\%((\a\+)\)\=:E11/
+ endtry
+ bw!
+endfunc
diff --git a/src/version.c b/src/version.c
index b258eea0e..94ae34a48 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2037,
+/**/
2036,
/**/
2035,