]> granicus.if.org Git - vim/commitdiff
patch 8.2.2427: can still switch windows for 'completefunc' v8.2.2427
authorBram Moolenaar <Bram@vim.org>
Fri, 29 Jan 2021 20:47:24 +0000 (21:47 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 29 Jan 2021 20:47:24 +0000 (21:47 +0100)
Problem:    Can still switch windows for 'completefunc'.
Solution:   Also disallow switching windows for other completions.

src/insexpand.c
src/testdir/test_ins_complete.vim
src/testdir/test_popup.vim
src/version.c

index 66507f04363b56ca1b97e82a2f17ac9dd4abaf57..8d76c686f5ff1304ae0458e661962333d515786a 100644 (file)
@@ -121,7 +121,6 @@ struct compl_S
 
 static char e_hitend[] = N_("Hit end of paragraph");
 # ifdef FEAT_COMPL_FUNC
-static char e_complwin[] = N_("E839: Completion function changed window");
 static char e_compldel[] = N_("E840: Completion function deleted text");
 # endif
 
@@ -2199,8 +2198,6 @@ expand_by_function(
     typval_T   args[3];
     char_u     *funcname;
     pos_T      pos;
-    win_T      *curwin_save;
-    buf_T      *curbuf_save;
     typval_T   rettv;
     int                save_State = State;
 
@@ -2216,8 +2213,6 @@ expand_by_function(
     args[2].v_type = VAR_UNKNOWN;
 
     pos = curwin->w_cursor;
-    curwin_save = curwin;
-    curbuf_save = curbuf;
     // Lock the text to avoid weird things from happening.  Also disallow
     // switching to another window, it should not be needed and may end up in
     // Insert mode in another buffer.
@@ -2246,11 +2241,6 @@ expand_by_function(
     }
     --textwinlock;
 
-    if (curwin_save != curwin || curbuf_save != curbuf)
-    {
-       emsg(_(e_complwin));
-       goto theend;
-    }
     curwin->w_cursor = pos;    // restore the cursor position
     validate_cursor();
     if (!EQUAL_POS(curwin->w_cursor, pos))
@@ -3843,8 +3833,6 @@ ins_complete(int c, int enable_pum)
            int         col;
            char_u      *funcname;
            pos_T       pos;
-           win_T       *curwin_save;
-           buf_T       *curbuf_save;
            int         save_State = State;
 
            // Call 'completefunc' or 'omnifunc' and get pattern length as a
@@ -3866,16 +3854,11 @@ ins_complete(int c, int enable_pum)
            args[1].vval.v_string = (char_u *)"";
            args[2].v_type = VAR_UNKNOWN;
            pos = curwin->w_cursor;
-           curwin_save = curwin;
-           curbuf_save = curbuf;
+           ++textwinlock;
            col = call_func_retnr(funcname, 2, args);
+           --textwinlock;
 
            State = save_State;
-           if (curwin_save != curwin || curbuf_save != curbuf)
-           {
-               emsg(_(e_complwin));
-               return FAIL;
-           }
            curwin->w_cursor = pos;     // restore the cursor position
            validate_cursor();
            if (!EQUAL_POS(curwin->w_cursor, pos))
index 489c1d9d943693a4225c4a0ddc5515228e244c42..613e9520d9dc2a45905689e31e63a3ef7c7e0874 100644 (file)
@@ -548,7 +548,7 @@ func Test_completefunc_error()
   endfunc
   set completefunc=CompleteFunc
   call setline(1, ['', 'abcd', ''])
-  call assert_fails('exe "normal 2G$a\<C-X>\<C-U>"', 'E840:')
+  call assert_fails('exe "normal 2G$a\<C-X>\<C-U>"', 'E578:')
 
   " delete text when called for the second time
   func CompleteFunc2(findstart, base)
index 2d0625bc0931e12d83a6e90a3b66f32a7ae29d30..c8f8820af4a05fbcf149df27298fd609d48a8466 100644 (file)
@@ -367,11 +367,9 @@ func Test_completefunc_opens_new_window_two()
   setlocal completefunc=DummyCompleteTwo
   call setline(1, 'two')
   /^two
-  call assert_fails('call feedkeys("A\<C-X>\<C-U>\<C-N>\<Esc>", "x")', 'E839:')
-  call assert_notequal(winid, win_getid())
-  q!
+  call assert_fails('call feedkeys("A\<C-X>\<C-U>\<C-N>\<Esc>", "x")', 'E565:')
   call assert_equal(winid, win_getid())
-  call assert_equal('two', getline(1))
+  call assert_equal('twodef', getline(1))
   q!
 endfunc
 
index ed17716a7ed6d7527e7d56b03443faba9e08270f..98f01dd790bc7bd389ffcfb0d01521c76445436d 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2427,
 /**/
     2426,
 /**/