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.