346 lines
10 KiB
Plaintext
346 lines
10 KiB
Plaintext
|
To: vim_dev@googlegroups.com
|
|||
|
Subject: Patch 7.3.052
|
|||
|
Fcc: outbox
|
|||
|
From: Bram Moolenaar <Bram@moolenaar.net>
|
|||
|
Mime-Version: 1.0
|
|||
|
Content-Type: text/plain; charset=UTF-8
|
|||
|
Content-Transfer-Encoding: 8bit
|
|||
|
------------
|
|||
|
|
|||
|
Patch 7.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'.
|
|||
|
Files: 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/testdir/test76.in, src/testdir/test76.ok
|
|||
|
|
|||
|
|
|||
|
*** ../vim-7.3.051/src/edit.c 2010-08-15 21:57:25.000000000 +0200
|
|||
|
--- src/edit.c 2010-11-10 16:50:12.000000000 +0100
|
|||
|
***************
|
|||
|
*** 58,63 ****
|
|||
|
--- 58,67 ----
|
|||
|
};
|
|||
|
|
|||
|
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,3838 ****
|
|||
|
--- 3837,3844 ----
|
|||
|
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,3855 ****
|
|||
|
args[1] = base;
|
|||
|
|
|||
|
pos = curwin->w_cursor;
|
|||
|
matchlist = call_func_retlist(funcname, 2, args, FALSE);
|
|||
|
curwin->w_cursor = pos; /* restore the cursor position */
|
|||
|
! if (matchlist == NULL)
|
|||
|
! return;
|
|||
|
|
|||
|
! ins_compl_add_list(matchlist);
|
|||
|
! list_unref(matchlist);
|
|||
|
}
|
|||
|
#endif /* FEAT_COMPL_FUNC */
|
|||
|
|
|||
|
--- 3849,3875 ----
|
|||
|
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 */
|
|||
|
! check_cursor();
|
|||
|
! if (!equalpos(curwin->w_cursor, pos))
|
|||
|
! {
|
|||
|
! EMSG(_(e_compldel));
|
|||
|
! goto theend;
|
|||
|
! }
|
|||
|
! if (matchlist != NULL)
|
|||
|
! ins_compl_add_list(matchlist);
|
|||
|
|
|||
|
! theend:
|
|||
|
! if (matchlist != NULL)
|
|||
|
! list_unref(matchlist);
|
|||
|
}
|
|||
|
#endif /* FEAT_COMPL_FUNC */
|
|||
|
|
|||
|
***************
|
|||
|
*** 4994,4999 ****
|
|||
|
--- 5014,5021 ----
|
|||
|
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,5016 ****
|
|||
|
--- 5031,5051 ----
|
|||
|
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;
|
|||
|
*** ../vim-7.3.051/src/testdir/Make_amiga.mak 2010-10-27 18:36:32.000000000 +0200
|
|||
|
--- src/testdir/Make_amiga.mak 2010-11-10 15:48:30.000000000 +0100
|
|||
|
***************
|
|||
|
*** 27,33 ****
|
|||
|
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
|
|||
|
|
|||
|
.SUFFIXES: .in .out
|
|||
|
|
|||
|
--- 27,34 ----
|
|||
|
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 \
|
|||
|
! test76.out
|
|||
|
|
|||
|
.SUFFIXES: .in .out
|
|||
|
|
|||
|
***************
|
|||
|
*** 122,124 ****
|
|||
|
--- 123,126 ----
|
|||
|
test73.out: test73.in
|
|||
|
test74.out: test74.in
|
|||
|
test75.out: test75.in
|
|||
|
+ test76.out: test76.in
|
|||
|
*** ../vim-7.3.051/src/testdir/Make_dos.mak 2010-10-27 18:36:32.000000000 +0200
|
|||
|
--- src/testdir/Make_dos.mak 2010-11-10 15:48:38.000000000 +0100
|
|||
|
***************
|
|||
|
*** 28,34 ****
|
|||
|
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
|
|||
|
|
|||
|
SCRIPTS32 = test50.out test70.out
|
|||
|
|
|||
|
--- 28,34 ----
|
|||
|
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 test76.out
|
|||
|
|
|||
|
SCRIPTS32 = test50.out test70.out
|
|||
|
|
|||
|
*** ../vim-7.3.051/src/testdir/Make_ming.mak 2010-10-27 18:36:32.000000000 +0200
|
|||
|
--- src/testdir/Make_ming.mak 2010-11-10 15:48:53.000000000 +0100
|
|||
|
***************
|
|||
|
*** 48,54 ****
|
|||
|
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
|
|||
|
|
|||
|
SCRIPTS32 = test50.out test70.out
|
|||
|
|
|||
|
--- 48,54 ----
|
|||
|
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 test76.out
|
|||
|
|
|||
|
SCRIPTS32 = test50.out test70.out
|
|||
|
|
|||
|
*** ../vim-7.3.051/src/testdir/Make_os2.mak 2010-10-27 18:36:32.000000000 +0200
|
|||
|
--- src/testdir/Make_os2.mak 2010-11-10 15:49:10.000000000 +0100
|
|||
|
***************
|
|||
|
*** 27,33 ****
|
|||
|
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
|
|||
|
|
|||
|
.SUFFIXES: .in .out
|
|||
|
|
|||
|
--- 27,34 ----
|
|||
|
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 \
|
|||
|
! test76.out
|
|||
|
|
|||
|
.SUFFIXES: .in .out
|
|||
|
|
|||
|
*** ../vim-7.3.051/src/testdir/Make_vms.mms 2010-10-27 18:36:32.000000000 +0200
|
|||
|
--- src/testdir/Make_vms.mms 2010-11-10 15:49:32.000000000 +0100
|
|||
|
***************
|
|||
|
*** 4,10 ****
|
|||
|
# Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
|
|||
|
# Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
|
|||
|
#
|
|||
|
! # Last change: 2010 Oct 20
|
|||
|
#
|
|||
|
# 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.
|
|||
|
--- 4,10 ----
|
|||
|
# Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
|
|||
|
# Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
|
|||
|
#
|
|||
|
! # 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,80 ****
|
|||
|
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
|
|||
|
|
|||
|
# Known problems:
|
|||
|
# Test 30: a problem around mac format - unknown reason
|
|||
|
--- 74,80 ----
|
|||
|
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 test76.out
|
|||
|
|
|||
|
# Known problems:
|
|||
|
# Test 30: a problem around mac format - unknown reason
|
|||
|
*** ../vim-7.3.051/src/testdir/Makefile 2010-10-27 18:36:32.000000000 +0200
|
|||
|
--- src/testdir/Makefile 2010-11-10 15:47:32.000000000 +0100
|
|||
|
***************
|
|||
|
*** 25,31 ****
|
|||
|
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
|
|||
|
|
|||
|
SCRIPTS_GUI = test16.out
|
|||
|
|
|||
|
--- 25,31 ----
|
|||
|
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 test76.out
|
|||
|
|
|||
|
SCRIPTS_GUI = test16.out
|
|||
|
|
|||
|
*** ../vim-7.3.051/src/testdir/test76.in 2010-11-10 16:51:45.000000000 +0100
|
|||
|
--- src/testdir/test76.in 2010-11-10 16:38:45.000000000 +0100
|
|||
|
***************
|
|||
|
*** 0 ****
|
|||
|
--- 1,46 ----
|
|||
|
+ Tests for completefunc/omnifunc. vim: set ft=vim :
|
|||
|
+
|
|||
|
+ STARTTEST
|
|||
|
+ :"Test that nothing happens if the 'completefunc' opens
|
|||
|
+ :"a new window (no completion, no crash)
|
|||
|
+ :so small.vim
|
|||
|
+ :function! DummyCompleteOne(findstart, base)
|
|||
|
+ : if a:findstart
|
|||
|
+ : return 0
|
|||
|
+ : else
|
|||
|
+ : wincmd n
|
|||
|
+ : return ['onedef', 'oneDEF']
|
|||
|
+ : endif
|
|||
|
+ :endfunction
|
|||
|
+ :setlocal completefunc=DummyCompleteOne
|
|||
|
+ /^one
|
|||
|
+ A:q!
|
|||
|
+ :function! DummyCompleteTwo(findstart, base)
|
|||
|
+ : if a:findstart
|
|||
|
+ : wincmd n
|
|||
|
+ : return 0
|
|||
|
+ : else
|
|||
|
+ : return ['twodef', 'twoDEF']
|
|||
|
+ : endif
|
|||
|
+ :endfunction
|
|||
|
+ :setlocal completefunc=DummyCompleteTwo
|
|||
|
+ /^two
|
|||
|
+ A:q!
|
|||
|
+ :"Test that 'completefunc' works when it's OK.
|
|||
|
+ :function! DummyCompleteThree(findstart, base)
|
|||
|
+ : if a:findstart
|
|||
|
+ : return 0
|
|||
|
+ : else
|
|||
|
+ : return ['threedef', 'threeDEF']
|
|||
|
+ : endif
|
|||
|
+ :endfunction
|
|||
|
+ :setlocal completefunc=DummyCompleteThree
|
|||
|
+ /^three
|
|||
|
+ A:/^+++/,/^three/w! test.out
|
|||
|
+ :qa!
|
|||
|
+ ENDTEST
|
|||
|
+
|
|||
|
+ +++
|
|||
|
+ one
|
|||
|
+ two
|
|||
|
+ three
|
|||
|
*** ../vim-7.3.051/src/testdir/test76.ok 2010-11-10 16:51:45.000000000 +0100
|
|||
|
--- src/testdir/test76.ok 2010-11-10 16:38:58.000000000 +0100
|
|||
|
***************
|
|||
|
*** 0 ****
|
|||
|
--- 1,4 ----
|
|||
|
+ +++
|
|||
|
+
|
|||
|
+ two
|
|||
|
+ threeDEF
|
|||
|
*** ../vim-7.3.051/src/version.c 2010-11-10 15:37:00.000000000 +0100
|
|||
|
--- src/version.c 2010-11-10 16:40:29.000000000 +0100
|
|||
|
***************
|
|||
|
*** 716,717 ****
|
|||
|
--- 716,719 ----
|
|||
|
{ /* Add new patch number below this line */
|
|||
|
+ /**/
|
|||
|
+ 52,
|
|||
|
/**/
|
|||
|
|
|||
|
--
|
|||
|
BRIDGEKEEPER: What is the air-speed velocity of an unladen swallow?
|
|||
|
ARTHUR: What do you mean? An African or European swallow?
|
|||
|
BRIDGEKEEPER: Er ... I don't know that ... Aaaaarrrrrrggghhh!
|
|||
|
BRIDGEKEEPER is cast into the gorge.
|
|||
|
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
|
|||
|
|
|||
|
/// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
|
|||
|
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
|
|||
|
\\\ download, build and distribute -- http://www.A-A-P.org ///
|
|||
|
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
|