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);
|
prompt = xmallocz(ec + 1);
|
||||||
memset(prompt, ' ', sc);
|
memset(prompt, ' ', sc);
|
||||||
memset(prompt + sc, '^', ec - sc + 1);
|
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);
|
NULL, CALLBACK_NONE);
|
||||||
msg_putchar('\n');
|
msg_putchar('\n');
|
||||||
xfree(prompt);
|
xfree(prompt);
|
||||||
if (resp != NULL) {
|
if (resp != NULL) {
|
||||||
typed = *resp;
|
typed = *resp;
|
||||||
xfree(resp);
|
xfree(resp);
|
||||||
// When ":normal" runs out of characters we get
|
} else {
|
||||||
// an empty line. Use "q" to get out of the
|
// getcmdline_prompt() returns NULL if there is no command line to return.
|
||||||
// loop.
|
typed = NUL;
|
||||||
if (ex_normal_busy && typed == NUL) {
|
}
|
||||||
typed = 'q';
|
// 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 {
|
} else {
|
||||||
char_u *orig_line = NULL;
|
char_u *orig_line = NULL;
|
||||||
|
@ -2330,8 +2330,6 @@ static int vgetorpeek(bool advance)
|
|||||||
// cmdline window.
|
// cmdline window.
|
||||||
if (p_im && (State & INSERT)) {
|
if (p_im && (State & INSERT)) {
|
||||||
c = Ctrl_L;
|
c = Ctrl_L;
|
||||||
} else if ((State & CMDLINE) && exmode_active) {
|
|
||||||
c = '\n';
|
|
||||||
} else if ((State & CMDLINE) || (cmdwin_type > 0 && tc == ESC)) {
|
} else if ((State & CMDLINE) || (cmdwin_type > 0 && tc == ESC)) {
|
||||||
c = Ctrl_C;
|
c = Ctrl_C;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
local helpers = require('test.functional.helpers')(after_each)
|
local helpers = require('test.functional.helpers')(after_each)
|
||||||
local clear = helpers.clear
|
local clear = helpers.clear
|
||||||
|
local command = helpers.command
|
||||||
local feed = helpers.feed
|
local feed = helpers.feed
|
||||||
local expect = helpers.expect
|
local expect = helpers.expect
|
||||||
|
local eq = helpers.eq
|
||||||
|
local eval = helpers.eval
|
||||||
|
|
||||||
before_each(clear)
|
before_each(clear)
|
||||||
|
|
||||||
@ -10,4 +13,15 @@ describe(':normal', function()
|
|||||||
feed('gQnormal! Ifoo<CR>')
|
feed('gQnormal! Ifoo<CR>')
|
||||||
expect('foo')
|
expect('foo')
|
||||||
end)
|
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)
|
end)
|
||||||
|
Loading…
Reference in New Issue
Block a user