diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-03-06 07:52:11 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-06 07:52:11 +0800 |
commit | e389b189021cb6b72cfd7583ce6fb5d8d3346d45 (patch) | |
tree | f5f58f759ac4bbd8bd00d5684b7ba079f1946db9 | |
parent | 533d671271eb76373d9940161e7bfd201b7e7c2b (diff) | |
download | rneovim-e389b189021cb6b72cfd7583ce6fb5d8d3346d45.tar.gz rneovim-e389b189021cb6b72cfd7583ce6fb5d8d3346d45.tar.bz2 rneovim-e389b189021cb6b72cfd7583ce6fb5d8d3346d45.zip |
vim-patch:9.0.1385: g'Esc is considered an error (#22544)
Problem: g'Esc is considered an error.
Solution: Make g'Esc silently abandon the command. (closes vim/vim#12110)
https://github.com/vim/vim/commit/f86dea8119f3141e3d2c680219036d1511101f9b
-rw-r--r-- | src/nvim/normal.c | 7 | ||||
-rw-r--r-- | src/nvim/testdir/test_normal.vim | 37 | ||||
-rw-r--r-- | test/functional/ui/mode_spec.lua | 22 |
3 files changed, 62 insertions, 4 deletions
diff --git a/src/nvim/normal.c b/src/nvim/normal.c index f7c99d5991..890215e754 100644 --- a/src/nvim/normal.c +++ b/src/nvim/normal.c @@ -963,7 +963,8 @@ normal_end: may_trigger_modechanged(); // Redraw the cursor with another shape, if we were in Operator-pending // mode or did a replace command. - if (s->c || s->ca.cmdchar == 'r') { + if (s->c || s->ca.cmdchar == 'r' + || (s->ca.cmdchar == 'g' && s->ca.nchar == 'r')) { ui_cursor_shape(); // may show different cursor shape } @@ -1162,7 +1163,7 @@ static int normal_execute(VimState *state, int key) State = MODE_NORMAL; - if (s->ca.nchar == ESC) { + if (s->ca.nchar == ESC || s->ca.extra_char == ESC) { clearop(&s->oa); s->command_finished = true; goto finish; @@ -4706,7 +4707,7 @@ static void nv_vreplace(cmdarg_T *cap) return; } - if (checkclearopq(cap->oap) || cap->extra_char == ESC) { + if (checkclearopq(cap->oap)) { return; } diff --git a/src/nvim/testdir/test_normal.vim b/src/nvim/testdir/test_normal.vim index 5d8e1913a2..582596748f 100644 --- a/src/nvim/testdir/test_normal.vim +++ b/src/nvim/testdir/test_normal.vim @@ -2540,6 +2540,8 @@ func Test_normal33_g_cmd2() norm! g'a call assert_equal('>', a[-1:]) call assert_equal(1, line('.')) + call assert_nobeep("normal! g`\<Esc>") + call assert_nobeep("normal! g'\<Esc>") " Test for g; and g, norm! g; @@ -3315,7 +3317,8 @@ func Test_gr_command() set modifiable& call assert_nobeep("normal! gr\<Esc>") - call assert_beeps("normal! cgr\<Esc>") + call assert_nobeep("normal! cgr\<Esc>") + call assert_beeps("normal! cgrx") call assert_equal('zxxxx line l', getline(1)) exe "normal! 2|gr\<C-V>\<Esc>" @@ -3895,4 +3898,36 @@ func Test_mouse_shape_after_failed_change() 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("\<Esc>") + 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/test/functional/ui/mode_spec.lua b/test/functional/ui/mode_spec.lua index cf4eb034e0..e870d6f25f 100644 --- a/test/functional/ui/mode_spec.lua +++ b/test/functional/ui/mode_spec.lua @@ -44,7 +44,10 @@ describe('ui mode_change event', function() {0:~ }| | ]], mode="normal"} + end) + -- oldtest: Test_mouse_shape_after_failed_change() + it('is restored to Normal mode after failed "c"', function() screen:try_resize(50, 4) command('set nomodifiable') @@ -65,6 +68,25 @@ describe('ui mode_change event', function() ]], mode="normal"} end) + -- oldtest: Test_mouse_shape_after_cancelling_gr() + it('is restored to Normal mode after cancelling "gr"', function() + feed('gr') + screen:expect{grid=[[ + ^ | + {0:~ }| + {0:~ }| + | + ]], mode="replace"} + + feed('<Esc>') + screen:expect{grid=[[ + ^ | + {0:~ }| + {0:~ }| + | + ]], mode="normal"} + end) + it('works in insert mode', function() feed('i') screen:expect{grid=[[ |