// NOTE: must call restore_last_search_pattern() before returning!
save_last_search_pattern();
- if (!do_incsearch_highlighting(firstc, &search_delim, is_state, &skiplen, &patlen))
+ if (!do_incsearch_highlighting(firstc, &search_delim, is_state,
+ &skiplen, &patlen))
{
restore_last_search_pattern();
return FAIL;
ga_clear(&winsizes);
return K_IGNORE;
}
- cmdwin_type = get_cmdline_type();
+ // Don't let quitting the More prompt make this fail.
+ got_int = FALSE;
// Create the command-line buffer empty.
- (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL);
+ if (do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL) == FAIL)
+ {
+ // Some autocommand messed it up?
+ win_close(curwin, TRUE);
+ ga_clear(&winsizes);
+ return Ctrl_C;
+ }
+ cmdwin_type = get_cmdline_type();
+
apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, curbuf);
(void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE);
apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);
call assert_equal(1, winnr('$'))
endfunc
+func Test_cmdwin_interrupted()
+ CheckScreendump
+
+ " aborting the :smile output caused the cmdline window to use the current
+ " buffer.
+ let lines =<< trim [SCRIPT]
+ au WinNew * smile
+ [SCRIPT]
+ call writefile(lines, 'XTest_cmdwin')
+
+ let buf = RunVimInTerminal('-S XTest_cmdwin', {'rows': 18})
+ call TermWait(buf, 1000)
+ " open cmdwin
+ call term_sendkeys(buf, "q:")
+ call TermWait(buf, 500)
+ " quit more prompt for :smile command
+ call term_sendkeys(buf, "q")
+ call TermWait(buf, 500)
+ " execute a simple command
+ call term_sendkeys(buf, "aecho 'done'\<CR>")
+ call VerifyScreenDump(buf, 'Test_cmdwin_interrupted', {})
+
+ " clean up
+ call StopVimInTerminal(buf)
+ call delete('XTest_cmdwin')
+endfunc
+
" Test for backtick expression in the command line
func Test_cmd_backtick()
%argd