| 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 |
| |
| |
| |
| |
| |
| *** 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; |
| |
| |
| |
| *** 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 |
| |
| |
| |
| *** 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 |
| |
| |
| |
| |
| *** 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 |
| |
| |
| |
| |
| *** 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 |
| |
| |
| |
| |
| *** 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 |
| |
| |
| |
| *** 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 |
| |
| |
| |
| |
| |
| --- 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 |
| |
| |
| |
| |
| --- 1,4 ---- |
| + +++ |
| + |
| + two |
| + threeDEF |
| |
| |
| |
| *** 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 /// |