summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-11-10 16:54:20 +0100
committerBram Moolenaar <Bram@vim.org>2010-11-10 16:54:20 +0100
commit37dd018cdd3ddc8f502bcbd343773f0af8681f4d (patch)
tree5dc92cbfd8f3310436a7452cf91113819c1abcb6
parent27d9eceb66e5b71594dc547c5243eebc3c15e5b8 (diff)
downloadvim-git-7.3.052.tar.gz
updated for version 7.3.052v7.3.052
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'.
-rw-r--r--src/edit.c43
-rw-r--r--src/testdir/Make_amiga.mak4
-rw-r--r--src/testdir/Make_dos.mak2
-rw-r--r--src/testdir/Make_ming.mak2
-rw-r--r--src/testdir/Make_os2.mak3
-rw-r--r--src/testdir/Make_vms.mms4
-rw-r--r--src/testdir/Makefile2
-rw-r--r--src/version.c2
8 files changed, 51 insertions, 11 deletions
diff --git a/src/edit.c b/src/edit.c
index 04a17ebf7..0bcc9db51 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -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;
diff --git a/src/testdir/Make_amiga.mak b/src/testdir/Make_amiga.mak
index 2e6ad69da..c4a6c7fd3 100644
--- a/src/testdir/Make_amiga.mak
+++ b/src/testdir/Make_amiga.mak
@@ -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
diff --git a/src/testdir/Make_dos.mak b/src/testdir/Make_dos.mak
index 87de0556b..3395c5232 100644
--- a/src/testdir/Make_dos.mak
+++ b/src/testdir/Make_dos.mak
@@ -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
diff --git a/src/testdir/Make_ming.mak b/src/testdir/Make_ming.mak
index 1d29e52c0..1d89dffe2 100644
--- a/src/testdir/Make_ming.mak
+++ b/src/testdir/Make_ming.mak
@@ -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
diff --git a/src/testdir/Make_os2.mak b/src/testdir/Make_os2.mak
index f05c6790b..361e69367 100644
--- a/src/testdir/Make_os2.mak
+++ b/src/testdir/Make_os2.mak
@@ -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
diff --git a/src/testdir/Make_vms.mms b/src/testdir/Make_vms.mms
index 780654055..5ddb1d8fe 100644
--- a/src/testdir/Make_vms.mms
+++ b/src/testdir/Make_vms.mms
@@ -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
diff --git a/src/testdir/Makefile b/src/testdir/Makefile
index 25591a103..833a82a73 100644
--- a/src/testdir/Makefile
+++ b/src/testdir/Makefile
@@ -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
diff --git a/src/version.c b/src/version.c
index 24992e771..f9609aa8e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -715,6 +715,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 52,
+/**/
51,
/**/
50,