mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge pull request #17986 from zeertzjq/fix-ex-mode-regression
Fix regression with :normal and Ex mode from #14311
This commit is contained in:
commit
a93b55273f
@ -3860,19 +3860,22 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout, bool do_buf_event, handle
|
||||
prompt = xmallocz(ec + 1);
|
||||
memset(prompt, ' ', sc);
|
||||
memset(prompt + sc, '^', ec - sc + 1);
|
||||
resp = (char_u *)getcmdline_prompt(NUL, prompt, 0, EXPAND_NOTHING,
|
||||
resp = (char_u *)getcmdline_prompt(-1, prompt, 0, EXPAND_NOTHING,
|
||||
NULL, CALLBACK_NONE);
|
||||
msg_putchar('\n');
|
||||
xfree(prompt);
|
||||
if (resp != NULL) {
|
||||
typed = *resp;
|
||||
xfree(resp);
|
||||
// When ":normal" runs out of characters we get
|
||||
// an empty line. Use "q" to get out of the
|
||||
// loop.
|
||||
if (ex_normal_busy && typed == NUL) {
|
||||
typed = 'q';
|
||||
}
|
||||
} else {
|
||||
// getcmdline_prompt() returns NULL if there is no command line to return.
|
||||
typed = NUL;
|
||||
}
|
||||
// When ":normal" runs out of characters we get
|
||||
// an empty line. Use "q" to get out of the
|
||||
// loop.
|
||||
if (ex_normal_busy && typed == NUL) {
|
||||
typed = 'q';
|
||||
}
|
||||
} else {
|
||||
char_u *orig_line = NULL;
|
||||
|
@ -2330,8 +2330,6 @@ static int vgetorpeek(bool advance)
|
||||
// cmdline window.
|
||||
if (p_im && (State & INSERT)) {
|
||||
c = Ctrl_L;
|
||||
} else if ((State & CMDLINE) && exmode_active) {
|
||||
c = '\n';
|
||||
} else if ((State & CMDLINE) || (cmdwin_type > 0 && tc == ESC)) {
|
||||
c = Ctrl_C;
|
||||
} else {
|
||||
|
@ -1,7 +1,10 @@
|
||||
local helpers = require('test.functional.helpers')(after_each)
|
||||
local clear = helpers.clear
|
||||
local command = helpers.command
|
||||
local feed = helpers.feed
|
||||
local expect = helpers.expect
|
||||
local eq = helpers.eq
|
||||
local eval = helpers.eval
|
||||
|
||||
before_each(clear)
|
||||
|
||||
@ -10,4 +13,15 @@ describe(':normal', function()
|
||||
feed('gQnormal! Ifoo<CR>')
|
||||
expect('foo')
|
||||
end)
|
||||
|
||||
it('normal! does not execute command in Ex mode when running out of characters', function()
|
||||
command('let g:var = 0')
|
||||
command('normal! gQlet g:var = 1')
|
||||
eq(0, eval('g:var'))
|
||||
end)
|
||||
|
||||
it('normal! gQinsert does not hang #17980', function()
|
||||
command('normal! gQinsert')
|
||||
expect('')
|
||||
end)
|
||||
end)
|
||||
|
Loading…
Reference in New Issue
Block a user