patch 9.0.0884: mouse shape remains in op-pending mode after failed change
Problem: Mouse shape remains in op-pending mode after failed change.
Solution: Reset finish_op and restore it. (closes #11545)
diff --git a/src/ops.c b/src/ops.c
index ed8a5d8..6e51822 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -1775,8 +1775,14 @@
if (oap->motion_type == MLINE)
fix_indent();
+ // Reset finish_op now, don't want it set inside edit().
+ int save_finish_op = finish_op;
+ finish_op = FALSE;
+
retval = edit(NUL, FALSE, (linenr_T)1);
+ finish_op = save_finish_op;
+
/*
* In Visual block mode, handle copying the new text to all lines of the
* block.
@@ -3438,8 +3444,6 @@
{
#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;
typval_T rettv;
@@ -3466,9 +3470,11 @@
// Reset virtual_op so that 'virtualedit' can be changed in the
// function.
+ int save_virtual_op = virtual_op;
virtual_op = MAYBE;
// Reset finish_op so that mode() returns the right value.
+ int save_finish_op = finish_op;
finish_op = FALSE;
if (call_callback(&opfunc_cb, 0, &rettv, 1, argv) != FAIL)
@@ -4113,8 +4119,6 @@
// before.
restore_lbr(lbr_saved);
#endif
- // Reset finish_op now, don't want it set inside edit().
- finish_op = FALSE;
if (op_change(oap)) // will call edit()
cap->retval |= CA_COMMAND_BUSY;
if (restart_edit == 0)