1
0
forked from aniani/vim

patch 8.2.5020: using 'imstatusfunc' and 'imactivatefunc' breaks 'foldopen'

Problem:    Using 'imstatusfunc' and 'imactivatefunc' breaks 'foldopen'.
Solution:   Save and restore the KeyTyped flag. (closes #10479)
This commit is contained in:
Milly
2022-05-26 13:16:25 +01:00
committed by Bram Moolenaar
parent 0f7a3e1de6
commit c7e54efe4d
3 changed files with 37 additions and 0 deletions

View File

@@ -89,17 +89,21 @@ set_imstatusfunc_option(void)
call_imactivatefunc(int active)
{
typval_T argv[2];
int save_KeyTyped = KeyTyped;
argv[0].v_type = VAR_NUMBER;
argv[0].vval.v_number = active ? 1 : 0;
argv[1].v_type = VAR_UNKNOWN;
(void)call_callback_retnr(&imaf_cb, 1, argv);
KeyTyped = save_KeyTyped;
}
static int
call_imstatusfunc(void)
{
int is_active;
int save_KeyTyped = KeyTyped;
// FIXME: Don't execute user function in unsafe situation.
if (exiting || is_autocmd_blocked())
@@ -109,6 +113,8 @@ call_imstatusfunc(void)
++msg_silent;
is_active = call_callback_retnr(&imsf_cb, 0, NULL);
--msg_silent;
KeyTyped = save_KeyTyped;
return (is_active > 0);
}
#endif

View File

@@ -63,6 +63,35 @@ func Test_getimstatus()
set imstatusfunc=
endfunc
func Test_imactivatefunc_imstatusfunc_callback_no_breaks_foldopen()
CheckScreendump
let lines =<< trim END
func IM_activatefunc(active)
endfunc
func IM_statusfunc()
return 0
endfunc
set imactivatefunc=IM_activatefunc
set imstatusfunc=IM_statusfunc
set foldmethod=marker
set foldopen=search
call setline(1, ['{{{', 'abc', '}}}'])
%foldclose
END
call writefile(lines, 'Xscript')
let buf = RunVimInTerminal('-S Xscript', {})
call term_wait(buf)
call assert_notequal('abc', term_getline(buf, 2))
call term_sendkeys(buf, "/abc\n")
call term_wait(buf)
call assert_equal('abc', term_getline(buf, 2))
" clean up
call StopVimInTerminal(buf)
call delete('Xscript')
endfunc
" Test for using an lmap in insert mode
func Test_lmap_in_insert_mode()
new

View File

@@ -734,6 +734,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
5020,
/**/
5019,
/**/