patch 9.1.0940: Wrong cursor shape with "gq" and 'indentexpr' executes :normal

Commit: 
https://github.com/vim/vim/commit/6c3027744e71937b24829135ba072090d7d52bc3
Author: zeertzjq <zeert...@outlook.com>
Date:   Tue Dec 17 20:26:45 2024 +0100

    patch 9.1.0940: Wrong cursor shape with "gq" and 'indentexpr' executes 
:normal
    
    Problem:  Wrong cursor shape with "gq" and 'indentexpr' executes :normal
    Solution: Update cursor and mouse shape after restoring old_State.
              (zeertzjq)
    
    closes: #16241
    
    Signed-off-by: zeertzjq <zeert...@outlook.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>
    Solution: Update cursor and mouse shape after restoring old_State.

diff --git a/src/testdir/test_indent.vim b/src/testdir/test_indent.vim
index a7e9f425c..0cead5fb1 100644
--- a/src/testdir/test_indent.vim
+++ b/src/testdir/test_indent.vim
@@ -1,5 +1,8 @@
 " Test for various indent options
 
+source shared.vim
+source check.vim
+
 func Test_preserveindent()
   new
   " Test for autoindent copying indent from the previous line
@@ -300,4 +303,50 @@ func Test_indent_overflow_count2()
   close!
 endfunc
 
+" Test that mouse shape is restored to Normal mode after using "gq" when
+" 'indentexpr' executes :normal.
+func Test_indent_norm_with_gq()
+  CheckFeature mouseshape
+  CheckCanRunGui
+
+  let lines =<< trim END
+    func Indent()
+      exe "normal! \<Ignore>"
+      return 0
+    endfunc
+
+    setlocal indentexpr=Indent()
+  END
+  call writefile(lines, 'Xindentexpr.vim', 'D')
+
+  let lines =<< trim END
+    vim9script
+    var mouse_shapes = []
+
+    setline(1, [repeat('a', 80), repeat('b', 80)])
+
+    feedkeys('ggVG')
+    timer_start(50, (_) => {
+      mouse_shapes += [getmouseshape()]
+      timer_start(50, (_) => {
+        feedkeys('gq')
+        timer_start(50, (_) => {
+          mouse_shapes += [getmouseshape()]
+          timer_start(50, (_) => {
+            writefile(mouse_shapes, 'Xmouseshapes')
+            quit!
+          })
+        })
+      })
+    })
+  END
+  call writefile(lines, 'Xmouseshape.vim', 'D')
+
+  call RunVim([], [], "-g -S Xindentexpr.vim -S Xmouseshape.vim")
+  call WaitForAssert({-> assert_equal(['rightup-arrow', 'arrow'],
+        \ readfile('Xmouseshapes'))}, 300)
+
+  call delete('Xmouseshapes')
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/textformat.c b/src/textformat.c
index d380899c8..77e3eefaf 100644
--- a/src/textformat.c
+++ b/src/textformat.c
@@ -1163,13 +1163,24 @@ format_lines(
                State = MODE_INSERT;    // for open_line()
                smd_save = p_smd;
                p_smd = FALSE;
+
                insertchar(NUL, INSCHAR_FORMAT
                        + (do_comments ? INSCHAR_DO_COM : 0)
                        + (do_comments && do_comments_list
                                                       ? INSCHAR_COM_LIST : 0)
                        + (avoid_fex ? INSCHAR_NO_FEX : 0), second_indent);
+
                State = old_State;
                p_smd = smd_save;
+               // Cursor and mouse shape shapes may have been updated (e.g. by
+               // :normal) in insertchar(), so they need to be updated here.
+#ifdef CURSOR_SHAPE
+               ui_cursor_shape();
+#endif
+#ifdef FEAT_MOUSESHAPE
+               update_mouseshape(-1);
+#endif
+
                second_indent = -1;
                // at end of par.: need to set indent of next par.
                need_set_indent = is_end_par;
diff --git a/src/version.c b/src/version.c
index bee9e95b8..6a5e976b0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    940,
 /**/
     939,
 /**/

-- 
-- 
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 vim_dev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1tNdGj-0035qE-Sr%40256bit.org.

Raspunde prin e-mail lui