vim-patch:8.2.3537: wrong mode() during 'operatorfunc' #16087

Problem:    mode() does not return the right value in 'operatorfunc'.
Solution:   Reset finish_op while calling 'operatorfunc'.
75c30e96cf
This commit is contained in:
zeertzjq
2021-10-19 22:39:25 +08:00
committed by GitHub
parent bdd180b5d2
commit 308fd88d0d
2 changed files with 21 additions and 0 deletions

View File

@@ -2167,6 +2167,7 @@ static void op_function(const oparg_T *oap)
FUNC_ATTR_NONNULL_ALL
{
const TriState save_virtual_op = virtual_op;
const bool save_finish_op = finish_op;
if (*p_opfunc == NUL) {
EMSG(_("E774: 'operatorfunc' is empty"));
@@ -2193,9 +2194,13 @@ static void op_function(const oparg_T *oap)
// function.
virtual_op = kNone;
// Reset finish_op so that mode() returns the right value.
finish_op = false;
(void)call_func_retnr(p_opfunc, 1, argv);
virtual_op = save_virtual_op;
finish_op = save_finish_op;
}
}