Patch 9.0.0884
Problem:    Mouse shape remains in op-pending mode after failed change.
Solution:   Reset finish_op and restore it. (closes #11545)
Files:      src/ops.c, src/testdir/test_normal.vim


*** ../vim-9.0.0883/src/ops.c   2022-11-11 22:57:41.774304953 +0000
--- src/ops.c   2022-11-15 13:30:21.449762033 +0000
***************
*** 1775,1782 ****
--- 1775,1788 ----
      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,3445 ****
  {
  #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;
--- 3444,3449 ----
***************
*** 3466,3474 ****
--- 3470,3480 ----
  
        // 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,4120 ****
                // 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)
--- 4119,4124 ----
*** ../vim-9.0.0883/src/testdir/test_normal.vim 2022-10-13 20:23:24.438002818 
+0100
--- src/testdir/test_normal.vim 2022-11-15 13:26:31.629767161 +0000
***************
*** 3807,3810 ****
--- 3807,3843 ----
    bwipe!
  endfunc
  
+ " Test that mouse shape is restored to Normal mode after failed "c" operation.
+ func Test_mouse_shape_after_failed_change()
+   CheckFeature mouseshape
+   CheckCanRunGui
+ 
+   let lines =<< trim END
+     set mouseshape+=o:busy
+     setlocal nomodifiable
+     let g:mouse_shapes = []
+ 
+     func SaveMouseShape(timer)
+       let g:mouse_shapes += [getmouseshape()]
+     endfunc
+ 
+     func SaveAndQuit(timer)
+       call writefile(g:mouse_shapes, 'Xmouseshapes')
+       quit
+     endfunc
+ 
+     call timer_start(50, {_ -> feedkeys('c')})
+     call timer_start(100, 'SaveMouseShape')
+     call timer_start(150, {_ -> feedkeys('c')})
+     call timer_start(200, 'SaveMouseShape')
+     call timer_start(250, 'SaveAndQuit')
+   END
+   call writefile(lines, 'Xmouseshape.vim', 'D')
+   call RunVim([], [], "-g -S Xmouseshape.vim")
+   sleep 300m
+   call assert_equal(['busy', 'arrow'], readfile('Xmouseshapes'))
+ 
+   call delete('Xmouseshapes')
+ endfunc
+ 
  " vim: shiftwidth=2 sts=2 expandtab
*** ../vim-9.0.0883/src/version.c       2022-11-14 22:07:41.340221360 +0000
--- src/version.c       2022-11-15 13:28:33.809759433 +0000
***************
*** 697,698 ****
--- 697,700 ----
  {   /* Add new patch number below this line */
+ /**/
+     884,
  /**/

-- 
"Thou shalt not follow the Null Pointer, for at its end Chaos and
Madness lie."

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/20221115134642.501F01C07EF%40moolenaar.net.

Raspunde prin e-mail lui