mirror of
https://github.com/neovim/neovim.git
synced 2025-09-29 14:38:32 +00:00
vim-patch:9.0.0051: using CTRL-C wih :append may hang Vim
Problem: Using CTRL-C wih :append may hang Vim.
Solution: Reset got_int. (closes vim/vim#10729, closes vim/vim#10728)
f754fe6a3d
This commit is contained in:
@@ -1006,6 +1006,8 @@ static int command_line_check(VimState *state)
|
|||||||
// that occurs while typing a command should
|
// that occurs while typing a command should
|
||||||
// cause the command not to be executed.
|
// cause the command not to be executed.
|
||||||
|
|
||||||
|
got_int = false; // avoid infinite Ctrl-C loop in Ex mode
|
||||||
|
|
||||||
cursorcmd(); // set the cursor on the right spot
|
cursorcmd(); // set the cursor on the right spot
|
||||||
ui_cursor_shape();
|
ui_cursor_shape();
|
||||||
return 1;
|
return 1;
|
||||||
|
@@ -135,6 +135,29 @@ func Test_Ex_global()
|
|||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test for pressing Ctrl-C in :append inside a loop in Ex mode
|
||||||
|
" This used to hang Vim
|
||||||
|
func Test_Ex_append_in_loop()
|
||||||
|
CheckRunVimInTerminal
|
||||||
|
let buf = RunVimInTerminal('', {'rows': 6})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, "gQ")
|
||||||
|
call term_sendkeys(buf, "for i in range(1)\<CR>")
|
||||||
|
call term_sendkeys(buf, "append\<CR>")
|
||||||
|
call WaitForAssert({-> assert_match(': append', term_getline(buf, 5))}, 1000)
|
||||||
|
call term_sendkeys(buf, "\<C-C>")
|
||||||
|
call term_wait(buf)
|
||||||
|
call term_sendkeys(buf, "foo\<CR>")
|
||||||
|
call WaitForAssert({-> assert_match('foo', term_getline(buf, 5))}, 1000)
|
||||||
|
call term_sendkeys(buf, ".\<CR>")
|
||||||
|
call WaitForAssert({-> assert_match('.', term_getline(buf, 5))}, 1000)
|
||||||
|
call term_sendkeys(buf, "endfor\<CR>")
|
||||||
|
call term_sendkeys(buf, "vi\<CR>")
|
||||||
|
call WaitForAssert({-> assert_match('foo', term_getline(buf, 1))}, 1000)
|
||||||
|
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
endfunc
|
||||||
|
|
||||||
" In Ex-mode, a backslash escapes a newline
|
" In Ex-mode, a backslash escapes a newline
|
||||||
func Test_Ex_escape_enter()
|
func Test_Ex_escape_enter()
|
||||||
call feedkeys("gQlet l = \"a\\\<kEnter>b\"\<cr>vi\<cr>", 'xt')
|
call feedkeys("gQlet l = \"a\\\<kEnter>b\"\<cr>vi\<cr>", 'xt')
|
||||||
|
@@ -6,6 +6,7 @@ local eq = helpers.eq
|
|||||||
local eval = helpers.eval
|
local eval = helpers.eval
|
||||||
local feed = helpers.feed
|
local feed = helpers.feed
|
||||||
local meths = helpers.meths
|
local meths = helpers.meths
|
||||||
|
local sleep = helpers.sleep
|
||||||
|
|
||||||
before_each(clear)
|
before_each(clear)
|
||||||
|
|
||||||
@@ -122,4 +123,54 @@ describe('Ex mode', function()
|
|||||||
|
|
|
|
||||||
]])
|
]])
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('pressing Ctrl-C in :append inside a loop in Ex mode does not hang', function()
|
||||||
|
local screen = Screen.new(60, 6)
|
||||||
|
screen:set_default_attr_ids({
|
||||||
|
[0] = {bold = true, reverse = true}, -- MsgSeparator
|
||||||
|
[1] = {bold = true, foreground = Screen.colors.Blue}, -- NonText
|
||||||
|
})
|
||||||
|
screen:attach()
|
||||||
|
feed('gQ')
|
||||||
|
feed('for i in range(1)<CR>')
|
||||||
|
feed('append<CR>')
|
||||||
|
screen:expect([[
|
||||||
|
{0: }|
|
||||||
|
Entering Ex mode. Type "visual" to go to Normal mode. |
|
||||||
|
:for i in range(1) |
|
||||||
|
|
|
||||||
|
: append |
|
||||||
|
^ |
|
||||||
|
]])
|
||||||
|
feed('<C-C>')
|
||||||
|
sleep(10) -- Wait for Ctrl-C to flush input
|
||||||
|
feed('foo<CR>')
|
||||||
|
screen:expect([[
|
||||||
|
Entering Ex mode. Type "visual" to go to Normal mode. |
|
||||||
|
:for i in range(1) |
|
||||||
|
|
|
||||||
|
: append |
|
||||||
|
foo |
|
||||||
|
^ |
|
||||||
|
]])
|
||||||
|
feed('.<CR>')
|
||||||
|
screen:expect([[
|
||||||
|
:for i in range(1) |
|
||||||
|
|
|
||||||
|
: append |
|
||||||
|
foo |
|
||||||
|
. |
|
||||||
|
: ^ |
|
||||||
|
]])
|
||||||
|
feed('endfor<CR>')
|
||||||
|
feed('vi<CR>')
|
||||||
|
screen:expect([[
|
||||||
|
^foo |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
|
|
||||||
|
]])
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
Reference in New Issue
Block a user