diff src/ops.c @ 26007:1d2e1c23e458 v8.2.3537

patch 8.2.3537: mode() does not return the right value in 'operatorfunc' Commit: https://github.com/vim/vim/commit/75c30e96cf280a8cc01ac01c41a9252db3e503cc Author: naohiro ono <obcat@icloud.com> Date: Tue Oct 19 11:15:41 2021 +0100 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'.
author Bram Moolenaar <Bram@vim.org>
date Tue, 19 Oct 2021 12:30:05 +0200
parents b1440083f0da
children 6b4f017d7005
line wrap: on
line diff
--- 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;