]> granicus.if.org Git - vim/commitdiff
patch 8.1.2037: can call win_gotoid() in cmdline window v8.1.2037
authorBram Moolenaar <Bram@vim.org>
Sun, 15 Sep 2019 15:26:07 +0000 (17:26 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 15 Sep 2019 15:26:07 +0000 (17:26 +0200)
Problem:    Can call win_gotoid() in cmdline window.
Solution:   Disallow switching windows. (Yasuhiro Matsumoto, closes #4940)

src/evalwindow.c
src/testdir/test_cmdline.vim
src/version.c

index 08bdb9559cee6bd5bb2696fd3380cefdc93c0af9..6df14c59278924d46b91a6cf2eaa4038944dab00 100644 (file)
@@ -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;
+       }
 }
 
 /*
index f8d612565339a5263aca7d3aa85b22e7c500c4d8..98768b5097a401bf68025412a0e40eedca5bcb7b 100644 (file)
@@ -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
index b258eea0e145574d2a33c46412928ed9dc3051b3..94ae34a480a865eb0ff05bcfe2476727320518a9 100644 (file)
@@ -757,6 +757,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2037,
 /**/
     2036,
 /**/