]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.052 v7.3.052
authorBram Moolenaar <Bram@vim.org>
Wed, 10 Nov 2010 15:54:20 +0000 (16:54 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 10 Nov 2010 15:54:20 +0000 (16:54 +0100)
Problem:    When 'completefunc' opens a new window all kinds of errors follow.
            (Xavier Deguillard)
Solution:   When 'completefunc' goes to another window or buffer and when it
            deletes text abort completion.  Add a test for 'completefunc'.

src/edit.c
src/testdir/Make_amiga.mak
src/testdir/Make_dos.mak
src/testdir/Make_ming.mak
src/testdir/Make_os2.mak
src/testdir/Make_vms.mms
src/testdir/Makefile
src/version.c

index 04a17ebf77af57edad1c87d196be29ae14b54203..0bcc9db518f1a30370899031a340fb9904bd6a1b 100644 (file)
@@ -58,6 +58,10 @@ static char *ctrl_x_msgs[] =
 };
 
 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
 
 /*
  * Structure used to store one match for insert completion.
@@ -3833,6 +3837,8 @@ expand_by_function(type, base)
     char_u     *args[2];
     char_u     *funcname;
     pos_T      pos;
+    win_T      *curwin_save;
+    buf_T      *curbuf_save;
 
     funcname = (type == CTRL_X_FUNCTION) ? curbuf->b_p_cfu : curbuf->b_p_ofu;
     if (*funcname == NUL)
@@ -3843,13 +3849,27 @@ expand_by_function(type, base)
     args[1] = base;
 
     pos = curwin->w_cursor;
+    curwin_save = curwin;
+    curbuf_save = curbuf;
     matchlist = call_func_retlist(funcname, 2, args, FALSE);
+    if (curwin_save != curwin || curbuf_save != curbuf)
+    {
+       EMSG(_(e_complwin));
+       goto theend;
+    }
     curwin->w_cursor = pos;    /* restore the cursor position */
-    if (matchlist == NULL)
-       return;
+    check_cursor();
+    if (!equalpos(curwin->w_cursor, pos))
+    {
+       EMSG(_(e_compldel));
+       goto theend;
+    }
+    if (matchlist != NULL)
+       ins_compl_add_list(matchlist);
 
-    ins_compl_add_list(matchlist);
-    list_unref(matchlist);
+theend:
+    if (matchlist != NULL)
+       list_unref(matchlist);
 }
 #endif /* FEAT_COMPL_FUNC */
 
@@ -4994,6 +5014,8 @@ ins_complete(c)
            int         col;
            char_u      *funcname;
            pos_T       pos;
+           win_T       *curwin_save;
+           buf_T       *curbuf_save;
 
            /* Call 'completefunc' or 'omnifunc' and get pattern length as a
             * string */
@@ -5009,8 +5031,21 @@ ins_complete(c)
            args[0] = (char_u *)"1";
            args[1] = NULL;
            pos = curwin->w_cursor;
+           curwin_save = curwin;
+           curbuf_save = curbuf;
            col = call_func_retnr(funcname, 2, args, FALSE);
+           if (curwin_save != curwin || curbuf_save != curbuf)
+           {
+               EMSG(_(e_complwin));
+               return FAIL;
+           }
            curwin->w_cursor = pos;     /* restore the cursor position */
+           check_cursor();
+           if (!equalpos(curwin->w_cursor, pos))
+           {
+               EMSG(_(e_compldel));
+               return FAIL;
+           }
 
            if (col < 0)
                col = curs_col;
index 2e6ad69da007d6765f8eec5f51056b690827ccaa..c4a6c7fd39c6c9d8410dad6b2b59ee08f42ee452 100644 (file)
@@ -27,7 +27,8 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
                test56.out test57.out test58.out test59.out test60.out \
                test61.out test62.out test63.out test64.out test65.out \
                test66.out test67.out test68.out test69.out test70.out \
-               test71.out test72.out test73.out test74.out test75.out
+               test71.out test72.out test73.out test74.out test75.out \
+               test76.out
 
 .SUFFIXES: .in .out
 
@@ -122,3 +123,4 @@ test72.out: test72.in
 test73.out: test73.in
 test74.out: test74.in
 test75.out: test75.in
+test76.out: test76.in
index 87de0556b6121fe1ee0b33bc01be902443c0387c..3395c52320d433b0a2fd4ecca0e822c4687a4e78 100644 (file)
@@ -28,7 +28,7 @@ SCRIPTS =     test3.out test4.out test5.out test6.out test7.out \
                test37.out test38.out test39.out test40.out test41.out \
                test42.out test52.out test65.out test66.out test67.out \
                test68.out test69.out test71.out test72.out test73.out \
-               test74.out test75.out
+               test74.out test75.out test76.out
 
 SCRIPTS32 =    test50.out test70.out
 
index 1d29e52c0da18ab0ebb389bae76c1e6a9cdd2b60..1d89dffe217e9e93c1b9b4e996326f0e715b3232 100644 (file)
@@ -48,7 +48,7 @@ SCRIPTS =     test3.out test4.out test5.out test6.out test7.out \
                test37.out test38.out test39.out test40.out test41.out \
                test42.out test52.out test65.out test66.out test67.out \
                test68.out test69.out test71.out test72.out test73.out \
-               test74.out test75.out
+               test74.out test75.out test76.out
 
 SCRIPTS32 =    test50.out test70.out
 
index f05c6790bb02ecffaa5a1667a577bd754d5ee081..361e69367d61c817f5d5445dc8ff736e9775af0e 100644 (file)
@@ -27,7 +27,8 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
                test56.out test57.out test58.out test59.out test60.out \
                test61.out test62.out test63.out test64.out test65.out \
                test66.out test67.out test68.out test69.out test70.out \
-               test71.out test72.out test73.out test74.out test75.out
+               test71.out test72.out test73.out test74.out test75.out \
+               test76.out
 
 .SUFFIXES: .in .out
 
index 780654055a3daa19daf181f2ab550ef63bc64840..5ddb1d8feb65d9c42695962058f761fcdb677f74 100644 (file)
@@ -4,7 +4,7 @@
 # Authors:     Zoltan Arpadffy, <arpadffy@polarhome.com>
 #              Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
 #
-# Last change:  2010 Oct 20
+# Last change:  2010 Nov 10
 #
 # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
 # Edit the lines in the Configuration section below to select.
@@ -74,7 +74,7 @@ SCRIPT = test1.out  test2.out  test3.out  test4.out  test5.out  \
         test56.out test57.out test60.out \
         test61.out test62.out test63.out test64.out test65.out \
         test66.out test67.out test68.out test69.out \
-        test71.out test72.out test74.out test75.out
+        test71.out test72.out test74.out test75.out test76.out
 
 # Known problems:
 # Test 30: a problem around mac format - unknown reason
index 25591a103d72e6512edc7c53f6e2ed9fad9740b1..833a82a736ccc0afa9532278f1fb3b056919f7c6 100644 (file)
@@ -25,7 +25,7 @@ SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
                test59.out test60.out test61.out test62.out test63.out \
                test64.out test65.out test66.out test67.out test68.out \
                test69.out test70.out test71.out test72.out test73.out \
-               test74.out test75.out
+               test74.out test75.out test76.out
 
 SCRIPTS_GUI = test16.out
 
index 24992e771831a881527010b9fd43f87cd1de69b8..f9609aa8e69e86e9fec2453b32772aa9bef5a314 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    52,
 /**/
     51,
 /**/