mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 11:15:14 -07:00
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)
f86dea8119
This commit is contained in:
parent
533d671271
commit
e389b18902
@ -963,7 +963,8 @@ normal_end:
|
|||||||
may_trigger_modechanged();
|
may_trigger_modechanged();
|
||||||
// Redraw the cursor with another shape, if we were in Operator-pending
|
// Redraw the cursor with another shape, if we were in Operator-pending
|
||||||
// mode or did a replace command.
|
// 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
|
ui_cursor_shape(); // may show different cursor shape
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1162,7 +1163,7 @@ static int normal_execute(VimState *state, int key)
|
|||||||
|
|
||||||
State = MODE_NORMAL;
|
State = MODE_NORMAL;
|
||||||
|
|
||||||
if (s->ca.nchar == ESC) {
|
if (s->ca.nchar == ESC || s->ca.extra_char == ESC) {
|
||||||
clearop(&s->oa);
|
clearop(&s->oa);
|
||||||
s->command_finished = true;
|
s->command_finished = true;
|
||||||
goto finish;
|
goto finish;
|
||||||
@ -4706,7 +4707,7 @@ static void nv_vreplace(cmdarg_T *cap)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (checkclearopq(cap->oap) || cap->extra_char == ESC) {
|
if (checkclearopq(cap->oap)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2540,6 +2540,8 @@ func Test_normal33_g_cmd2()
|
|||||||
norm! g'a
|
norm! g'a
|
||||||
call assert_equal('>', a[-1:])
|
call assert_equal('>', a[-1:])
|
||||||
call assert_equal(1, line('.'))
|
call assert_equal(1, line('.'))
|
||||||
|
call assert_nobeep("normal! g`\<Esc>")
|
||||||
|
call assert_nobeep("normal! g'\<Esc>")
|
||||||
|
|
||||||
" Test for g; and g,
|
" Test for g; and g,
|
||||||
norm! g;
|
norm! g;
|
||||||
@ -3315,7 +3317,8 @@ func Test_gr_command()
|
|||||||
set modifiable&
|
set modifiable&
|
||||||
|
|
||||||
call assert_nobeep("normal! gr\<Esc>")
|
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))
|
call assert_equal('zxxxx line l', getline(1))
|
||||||
exe "normal! 2|gr\<C-V>\<Esc>"
|
exe "normal! 2|gr\<C-V>\<Esc>"
|
||||||
@ -3895,4 +3898,36 @@ func Test_mouse_shape_after_failed_change()
|
|||||||
call delete('Xmouseshapes')
|
call delete('Xmouseshapes')
|
||||||
endfunc
|
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
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@ -44,7 +44,10 @@ describe('ui mode_change event', function()
|
|||||||
{0:~ }|
|
{0:~ }|
|
||||||
|
|
|
|
||||||
]], mode="normal"}
|
]], 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)
|
screen:try_resize(50, 4)
|
||||||
command('set nomodifiable')
|
command('set nomodifiable')
|
||||||
|
|
||||||
@ -65,6 +68,25 @@ describe('ui mode_change event', function()
|
|||||||
]], mode="normal"}
|
]], mode="normal"}
|
||||||
end)
|
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()
|
it('works in insert mode', function()
|
||||||
feed('i')
|
feed('i')
|
||||||
screen:expect{grid=[[
|
screen:expect{grid=[[
|
||||||
|
Loading…
Reference in New Issue
Block a user