Patch 8.2.2427
Problem: Can still switch windows for 'completefunc'.
Solution: Also disallow switching windows for other completions.
Files: src/insexpand.c, src/testdir/test_ins_complete.vim,
src/testdir/test_popup.vim
*** ../vim-8.2.2426/src/insexpand.c 2021-01-29 21:07:03.995298849 +0100
--- src/insexpand.c 2021-01-29 21:38:32.524194427 +0100
***************
*** 121,127 ****
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
--- 121,126 ----
***************
*** 2199,2206 ****
typval_T args[3];
char_u *funcname;
pos_T pos;
- win_T *curwin_save;
- buf_T *curbuf_save;
typval_T rettv;
int save_State = State;
--- 2198,2203 ----
***************
*** 2216,2223 ****
args[2].v_type = VAR_UNKNOWN;
pos = curwin->w_cursor;
- curwin_save = curwin;
- curbuf_save = curbuf;
// Lock the text to avoid weird things from happening. Also disallow
// switching to another window, it should not be needed and may end up in
// Insert mode in another buffer.
--- 2213,2218 ----
***************
*** 2246,2256 ****
}
--textwinlock;
- if (curwin_save != curwin || curbuf_save != curbuf)
- {
- emsg(_(e_complwin));
- goto theend;
- }
curwin->w_cursor = pos; // restore the cursor position
validate_cursor();
if (!EQUAL_POS(curwin->w_cursor, pos))
--- 2241,2246 ----
***************
*** 3843,3850 ****
int col;
char_u *funcname;
pos_T pos;
- win_T *curwin_save;
- buf_T *curbuf_save;
int save_State = State;
// Call 'completefunc' or 'omnifunc' and get pattern length as a
--- 3833,3838 ----
***************
*** 3866,3881 ****
args[1].vval.v_string = (char_u *)"";
args[2].v_type = VAR_UNKNOWN;
pos = curwin->w_cursor;
! curwin_save = curwin;
! curbuf_save = curbuf;
col = call_func_retnr(funcname, 2, args);
State = save_State;
- if (curwin_save != curwin || curbuf_save != curbuf)
- {
- emsg(_(e_complwin));
- return FAIL;
- }
curwin->w_cursor = pos; // restore the cursor position
validate_cursor();
if (!EQUAL_POS(curwin->w_cursor, pos))
--- 3854,3864 ----
args[1].vval.v_string = (char_u *)"";
args[2].v_type = VAR_UNKNOWN;
pos = curwin->w_cursor;
! ++textwinlock;
col = call_func_retnr(funcname, 2, args);
+ --textwinlock;
State = save_State;
curwin->w_cursor = pos; // restore the cursor position
validate_cursor();
if (!EQUAL_POS(curwin->w_cursor, pos))
*** ../vim-8.2.2426/src/testdir/test_ins_complete.vim 2021-01-29
21:07:03.995298849 +0100
--- src/testdir/test_ins_complete.vim 2021-01-29 21:32:07.633856753 +0100
***************
*** 548,554 ****
endfunc
set completefunc=CompleteFunc
call setline(1, ['', 'abcd', ''])
! call assert_fails('exe "normal 2G$a\<C-X>\<C-U>"', 'E840:')
" delete text when called for the second time
func CompleteFunc2(findstart, base)
--- 548,554 ----
endfunc
set completefunc=CompleteFunc
call setline(1, ['', 'abcd', ''])
! call assert_fails('exe "normal 2G$a\<C-X>\<C-U>"', 'E578:')
" delete text when called for the second time
func CompleteFunc2(findstart, base)
*** ../vim-8.2.2426/src/testdir/test_popup.vim 2021-01-29 21:07:03.995298849
+0100
--- src/testdir/test_popup.vim 2021-01-29 21:35:58.457016985 +0100
***************
*** 367,377 ****
setlocal completefunc=DummyCompleteTwo
call setline(1, 'two')
/^two
! call assert_fails('call feedkeys("A\<C-X>\<C-U>\<C-N>\<Esc>", "x")',
'E839:')
! call assert_notequal(winid, win_getid())
! q!
call assert_equal(winid, win_getid())
! call assert_equal('two', getline(1))
q!
endfunc
--- 367,375 ----
setlocal completefunc=DummyCompleteTwo
call setline(1, 'two')
/^two
! call assert_fails('call feedkeys("A\<C-X>\<C-U>\<C-N>\<Esc>", "x")',
'E565:')
call assert_equal(winid, win_getid())
! call assert_equal('twodef', getline(1))
q!
endfunc
*** ../vim-8.2.2426/src/version.c 2021-01-29 21:07:03.995298849 +0100
--- src/version.c 2021-01-29 21:27:14.010899657 +0100
***************
*** 752,753 ****
--- 752,755 ----
{ /* Add new patch number below this line */
+ /**/
+ 2427,
/**/
--
XML is a nice language for computers. Not for humans.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/202101292047.10TKlsIY462934%40masaka.moolenaar.net.