mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.3537: mode() does not return the right value in 'operatorfunc'
Problem: mode() does not return the right value in 'operatorfunc'. Solution: Reset finish_op while calling 'operatorfunc'.
This commit is contained in:
parent
ad6b90c33c
commit
75c30e96cf
@ -3314,6 +3314,7 @@ op_function(oparg_T *oap UNUSED)
|
|||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
typval_T argv[2];
|
typval_T argv[2];
|
||||||
int save_virtual_op = virtual_op;
|
int save_virtual_op = virtual_op;
|
||||||
|
int save_finish_op = finish_op;
|
||||||
pos_T orig_start = curbuf->b_op_start;
|
pos_T orig_start = curbuf->b_op_start;
|
||||||
pos_T orig_end = curbuf->b_op_end;
|
pos_T orig_end = curbuf->b_op_end;
|
||||||
|
|
||||||
@ -3341,9 +3342,13 @@ op_function(oparg_T *oap UNUSED)
|
|||||||
// function.
|
// function.
|
||||||
virtual_op = MAYBE;
|
virtual_op = MAYBE;
|
||||||
|
|
||||||
|
// Reset finish_op so that mode() returns the right value.
|
||||||
|
finish_op = FALSE;
|
||||||
|
|
||||||
(void)call_func_noret(p_opfunc, 1, argv);
|
(void)call_func_noret(p_opfunc, 1, argv);
|
||||||
|
|
||||||
virtual_op = save_virtual_op;
|
virtual_op = save_virtual_op;
|
||||||
|
finish_op = save_finish_op;
|
||||||
if (cmdmod.cmod_flags & CMOD_LOCKMARKS)
|
if (cmdmod.cmod_flags & CMOD_LOCKMARKS)
|
||||||
{
|
{
|
||||||
curbuf->b_op_start = orig_start;
|
curbuf->b_op_start = orig_start;
|
||||||
|
@ -912,6 +912,20 @@ func Test_mode()
|
|||||||
call assert_equal('c-ce', g:current_modes)
|
call assert_equal('c-ce', g:current_modes)
|
||||||
" How to test Ex mode?
|
" How to test Ex mode?
|
||||||
|
|
||||||
|
" Test mode in operatorfunc (it used to be Operator-pending).
|
||||||
|
set operatorfunc=OperatorFunc
|
||||||
|
function OperatorFunc(_)
|
||||||
|
call Save_mode()
|
||||||
|
endfunction
|
||||||
|
execute "normal! g@l\<Esc>"
|
||||||
|
call assert_equal('n-n', g:current_modes)
|
||||||
|
execute "normal! i\<C-o>g@l\<Esc>"
|
||||||
|
call assert_equal('n-niI', g:current_modes)
|
||||||
|
execute "normal! R\<C-o>g@l\<Esc>"
|
||||||
|
call assert_equal('n-niR', g:current_modes)
|
||||||
|
execute "normal! gR\<C-o>g@l\<Esc>"
|
||||||
|
call assert_equal('n-niV', g:current_modes)
|
||||||
|
|
||||||
if has('terminal')
|
if has('terminal')
|
||||||
term
|
term
|
||||||
call feedkeys("\<C-W>N", 'xt')
|
call feedkeys("\<C-W>N", 'xt')
|
||||||
@ -924,6 +938,8 @@ func Test_mode()
|
|||||||
iunmap <F2>
|
iunmap <F2>
|
||||||
xunmap <F2>
|
xunmap <F2>
|
||||||
set complete&
|
set complete&
|
||||||
|
set operatorfunc&
|
||||||
|
delfunction OperatorFunc
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" Test for append()
|
" Test for append()
|
||||||
|
@ -757,6 +757,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 */
|
||||||
|
/**/
|
||||||
|
3537,
|
||||||
/**/
|
/**/
|
||||||
3536,
|
3536,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user