forked from aniani/vim
patch 8.2.2427: can still switch windows for 'completefunc'
Problem: Can still switch windows for 'completefunc'. Solution: Also disallow switching windows for other completions.
This commit is contained in:
@@ -121,7 +121,6 @@ struct compl_S
|
|||||||
|
|
||||||
static char e_hitend[] = N_("Hit end of paragraph");
|
static char e_hitend[] = N_("Hit end of paragraph");
|
||||||
# ifdef FEAT_COMPL_FUNC
|
# ifdef FEAT_COMPL_FUNC
|
||||||
static char e_complwin[] = N_("E839: Completion function changed window");
|
|
||||||
static char e_compldel[] = N_("E840: Completion function deleted text");
|
static char e_compldel[] = N_("E840: Completion function deleted text");
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
@@ -2199,8 +2198,6 @@ expand_by_function(
|
|||||||
typval_T args[3];
|
typval_T args[3];
|
||||||
char_u *funcname;
|
char_u *funcname;
|
||||||
pos_T pos;
|
pos_T pos;
|
||||||
win_T *curwin_save;
|
|
||||||
buf_T *curbuf_save;
|
|
||||||
typval_T rettv;
|
typval_T rettv;
|
||||||
int save_State = State;
|
int save_State = State;
|
||||||
|
|
||||||
@@ -2216,8 +2213,6 @@ expand_by_function(
|
|||||||
args[2].v_type = VAR_UNKNOWN;
|
args[2].v_type = VAR_UNKNOWN;
|
||||||
|
|
||||||
pos = curwin->w_cursor;
|
pos = curwin->w_cursor;
|
||||||
curwin_save = curwin;
|
|
||||||
curbuf_save = curbuf;
|
|
||||||
// Lock the text to avoid weird things from happening. Also disallow
|
// 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
|
// switching to another window, it should not be needed and may end up in
|
||||||
// Insert mode in another buffer.
|
// Insert mode in another buffer.
|
||||||
@@ -2246,11 +2241,6 @@ expand_by_function(
|
|||||||
}
|
}
|
||||||
--textwinlock;
|
--textwinlock;
|
||||||
|
|
||||||
if (curwin_save != curwin || curbuf_save != curbuf)
|
|
||||||
{
|
|
||||||
emsg(_(e_complwin));
|
|
||||||
goto theend;
|
|
||||||
}
|
|
||||||
curwin->w_cursor = pos; // restore the cursor position
|
curwin->w_cursor = pos; // restore the cursor position
|
||||||
validate_cursor();
|
validate_cursor();
|
||||||
if (!EQUAL_POS(curwin->w_cursor, pos))
|
if (!EQUAL_POS(curwin->w_cursor, pos))
|
||||||
@@ -3843,8 +3833,6 @@ ins_complete(int c, int enable_pum)
|
|||||||
int col;
|
int col;
|
||||||
char_u *funcname;
|
char_u *funcname;
|
||||||
pos_T pos;
|
pos_T pos;
|
||||||
win_T *curwin_save;
|
|
||||||
buf_T *curbuf_save;
|
|
||||||
int save_State = State;
|
int save_State = State;
|
||||||
|
|
||||||
// Call 'completefunc' or 'omnifunc' and get pattern length as a
|
// Call 'completefunc' or 'omnifunc' and get pattern length as a
|
||||||
@@ -3866,16 +3854,11 @@ ins_complete(int c, int enable_pum)
|
|||||||
args[1].vval.v_string = (char_u *)"";
|
args[1].vval.v_string = (char_u *)"";
|
||||||
args[2].v_type = VAR_UNKNOWN;
|
args[2].v_type = VAR_UNKNOWN;
|
||||||
pos = curwin->w_cursor;
|
pos = curwin->w_cursor;
|
||||||
curwin_save = curwin;
|
++textwinlock;
|
||||||
curbuf_save = curbuf;
|
|
||||||
col = call_func_retnr(funcname, 2, args);
|
col = call_func_retnr(funcname, 2, args);
|
||||||
|
--textwinlock;
|
||||||
|
|
||||||
State = save_State;
|
State = save_State;
|
||||||
if (curwin_save != curwin || curbuf_save != curbuf)
|
|
||||||
{
|
|
||||||
emsg(_(e_complwin));
|
|
||||||
return FAIL;
|
|
||||||
}
|
|
||||||
curwin->w_cursor = pos; // restore the cursor position
|
curwin->w_cursor = pos; // restore the cursor position
|
||||||
validate_cursor();
|
validate_cursor();
|
||||||
if (!EQUAL_POS(curwin->w_cursor, pos))
|
if (!EQUAL_POS(curwin->w_cursor, pos))
|
||||||
|
|||||||
@@ -548,7 +548,7 @@ func Test_completefunc_error()
|
|||||||
endfunc
|
endfunc
|
||||||
set completefunc=CompleteFunc
|
set completefunc=CompleteFunc
|
||||||
call setline(1, ['', 'abcd', ''])
|
call setline(1, ['', 'abcd', ''])
|
||||||
call assert_fails('exe "normal 2G$a\<C-X>\<C-U>"', 'E840:')
|
call assert_fails('exe "normal 2G$a\<C-X>\<C-U>"', 'E578:')
|
||||||
|
|
||||||
" delete text when called for the second time
|
" delete text when called for the second time
|
||||||
func CompleteFunc2(findstart, base)
|
func CompleteFunc2(findstart, base)
|
||||||
|
|||||||
@@ -367,11 +367,9 @@ func Test_completefunc_opens_new_window_two()
|
|||||||
setlocal completefunc=DummyCompleteTwo
|
setlocal completefunc=DummyCompleteTwo
|
||||||
call setline(1, 'two')
|
call setline(1, 'two')
|
||||||
/^two
|
/^two
|
||||||
call assert_fails('call feedkeys("A\<C-X>\<C-U>\<C-N>\<Esc>", "x")', 'E839:')
|
call assert_fails('call feedkeys("A\<C-X>\<C-U>\<C-N>\<Esc>", "x")', 'E565:')
|
||||||
call assert_notequal(winid, win_getid())
|
|
||||||
q!
|
|
||||||
call assert_equal(winid, win_getid())
|
call assert_equal(winid, win_getid())
|
||||||
call assert_equal('two', getline(1))
|
call assert_equal('twodef', getline(1))
|
||||||
q!
|
q!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
|||||||
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2427,
|
||||||
/**/
|
/**/
|
||||||
2426,
|
2426,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user