Mercurial > vim
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;