From de888e41409f83dafd0b38aec8a45b9978e75689 Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Nov 10 2010 23:10:14 +0000 Subject: - patchlevel 052 --- diff --git a/7.3.052 b/7.3.052 new file mode 100644 index 0000000..be0691f --- /dev/null +++ b/7.3.052 @@ -0,0 +1,345 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.052 +Fcc: outbox +From: Bram Moolenaar +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, + # Sandor Kopanyi, + # +! # 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, + # Sandor Kopanyi, + # +! # 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 ///