From 75c30e96cf280a8cc01ac01c41a9252db3e503cc Mon Sep 17 00:00:00 2001 From: naohiro ono Date: Tue, 19 Oct 2021 11:15:41 +0100 Subject: 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'. --- src/ops.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/ops.c') diff --git a/src/ops.c b/src/ops.c index dedeebfb2..5a4855014 100644 --- a/src/ops.c +++ b/src/ops.c @@ -3314,6 +3314,7 @@ op_function(oparg_T *oap UNUSED) #ifdef FEAT_EVAL typval_T argv[2]; int save_virtual_op = virtual_op; + int save_finish_op = finish_op; pos_T orig_start = curbuf->b_op_start; pos_T orig_end = curbuf->b_op_end; @@ -3341,9 +3342,13 @@ op_function(oparg_T *oap UNUSED) // function. virtual_op = MAYBE; + // Reset finish_op so that mode() returns the right value. + finish_op = FALSE; + (void)call_func_noret(p_opfunc, 1, argv); virtual_op = save_virtual_op; + finish_op = save_finish_op; if (cmdmod.cmod_flags & CMOD_LOCKMARKS) { curbuf->b_op_start = orig_start; -- cgit v1.2.1