# HG changeset patch # User Bram Moolenaar # Date 1678051803 -3600 # Node ID cbf0ed5c83d0ffed76d72a925d974ff1bacc6db0 # Parent e34ae0c7da996607dd06d43b5698642fbc25fadc patch 9.0.1385: g'Esc is considered an error Commit: https://github.com/vim/vim/commit/f86dea8119f3141e3d2c680219036d1511101f9b Author: zeertzjq Date: Sun Mar 5 21:15:06 2023 +0000 patch 9.0.1385: g'Esc is considered an error Problem: g'Esc is considered an error. Solution: Make g'Esc silently abandon the command. (closes https://github.com/vim/vim/issues/12110) diff --git a/src/normal.c b/src/normal.c --- a/src/normal.c +++ b/src/normal.c @@ -899,7 +899,7 @@ normal_cmd( State = MODE_NORMAL; - if (ca.nchar == ESC) + if (ca.nchar == ESC || ca.extra_char == ESC) { clearop(oap); if (restart_edit == 0 && goto_im()) @@ -984,7 +984,8 @@ normal_end: #ifdef CURSOR_SHAPE // Redraw the cursor with another shape, if we were in Operator-pending // mode or did a replace command. - if (prev_finish_op || ca.cmdchar == 'r') + if (prev_finish_op || ca.cmdchar == 'r' + || (ca.cmdchar == 'g' && ca.nchar == 'r')) { ui_cursor_shape(); // may show different cursor shape # ifdef FEAT_MOUSESHAPE @@ -5025,7 +5026,7 @@ nv_vreplace(cmdarg_T *cap) return; } - if (checkclearopq(cap->oap) || cap->extra_char == ESC) + if (checkclearopq(cap->oap)) return; if (!curbuf->b_p_ma) @@ -5903,7 +5904,7 @@ nv_g_cmd(cmdarg_T *cap) else #endif // "g^A/g^X": sequentially increment visually selected region - if (VIsual_active) + if (VIsual_active) { cap->arg = TRUE; cap->cmdchar = cap->nchar; diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim --- a/src/testdir/test_normal.vim +++ b/src/testdir/test_normal.vim @@ -2526,6 +2526,8 @@ func Test_normal33_g_cmd2() norm! g'a call assert_equal('>', a[-1:]) call assert_equal(1, line('.')) + call assert_nobeep("normal! g`\") + call assert_nobeep("normal! g'\") " Test for g; and g, norm! g; @@ -3305,7 +3307,8 @@ func Test_gr_command() set modifiable& call assert_nobeep("normal! gr\") - call assert_beeps("normal! cgr\") + call assert_nobeep("normal! cgr\") + call assert_beeps("normal! cgrx") call assert_equal('zxxxx line l', getline(1)) exe "normal! 2|gr\\" @@ -3921,4 +3924,36 @@ func Test_mouse_shape_after_failed_chang call delete('Xmouseshapes') endfunc +" Test that mouse shape is restored to Normal mode after cancelling "gr". +func Test_mouse_shape_after_cancelling_gr() + CheckFeature mouseshape + CheckCanRunGui + + let lines =<< trim END + vim9script + var mouse_shapes = [] + + feedkeys('gr') + timer_start(50, (_) => { + mouse_shapes += [getmouseshape()] + timer_start(50, (_) => { + feedkeys("\") + 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 Xmouseshape.vim") + sleep 300m + call assert_equal(['beam', 'arrow'], readfile('Xmouseshapes')) + + call delete('Xmouseshapes') +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1385, +/**/ 1384, /**/ 1383,