mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
patch 9.0.0569: cannot easily get out when using "vim file | grep word"
Problem: Cannot easily get out when using "vim file | grep word". Solution: Without changes let CTRL-C exit Vim. Otherwise give a message on stderr. (closes #11209)
This commit is contained in:
27
src/normal.c
27
src/normal.c
@@ -6793,10 +6793,33 @@ nv_esc(cmdarg_T *cap)
|
|||||||
&& !VIsual_active
|
&& !VIsual_active
|
||||||
&& no_reason)
|
&& no_reason)
|
||||||
{
|
{
|
||||||
|
int out_redir = !stdout_isatty
|
||||||
|
#ifdef FEAT_GUI
|
||||||
|
&& !gui.in_use
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
// The user may accidentally do "vim file | grep word" and then
|
||||||
|
// CTRL-C doesn't show anything. With a changed buffer give the
|
||||||
|
// message on stderr. Without any changes might as well exit.
|
||||||
if (anyBufIsChanged())
|
if (anyBufIsChanged())
|
||||||
msg(_("Type :qa! and press <Enter> to abandon all changes and exit Vim"));
|
{
|
||||||
|
char *ms = _("Type :qa! and press <Enter> to abandon all changes and exit Vim");
|
||||||
|
|
||||||
|
if (out_redir)
|
||||||
|
mch_errmsg(ms);
|
||||||
|
else
|
||||||
|
msg(ms);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
msg(_("Type :qa and press <Enter> to exit Vim"));
|
{
|
||||||
|
if (out_redir)
|
||||||
|
{
|
||||||
|
got_int = FALSE;
|
||||||
|
do_cmdline_cmd((char_u *)"qa");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
msg(_("Type :qa and press <Enter> to exit Vim"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (restart_edit != 0)
|
if (restart_edit != 0)
|
||||||
|
@@ -1109,6 +1109,29 @@ func Test_not_a_term()
|
|||||||
call delete('Xvimout')
|
call delete('Xvimout')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test quitting with CTRL-C when output is redirected.
|
||||||
|
func Test_redirect_Ctrl_C()
|
||||||
|
CheckUnix
|
||||||
|
CheckNotGui
|
||||||
|
CheckRunVimInTerminal
|
||||||
|
|
||||||
|
let buf = Run_shell_in_terminal({})
|
||||||
|
" Wait for the shell to display a prompt
|
||||||
|
call WaitForAssert({-> assert_notequal('', term_getline(buf, 1))})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, GetVimProg() .. " | grep word\<CR>")
|
||||||
|
call WaitForAssert({-> assert_match("Output is not to a terminal", getline(1, 4)->join())})
|
||||||
|
" wait for the hard coded delay, otherwise the CTRL-C interrupts startup
|
||||||
|
sleep 2
|
||||||
|
call term_sendkeys(buf, "\<C-C>")
|
||||||
|
sleep 100m
|
||||||
|
call term_sendkeys(buf, "exit\<CR>")
|
||||||
|
call WaitForAssert({-> assert_equal('dead', job_status(g:job))})
|
||||||
|
|
||||||
|
exe buf . 'bwipe!'
|
||||||
|
unlet g:job
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
" Test for the "-w scriptout" argument
|
" Test for the "-w scriptout" argument
|
||||||
func Test_w_arg()
|
func Test_w_arg()
|
||||||
|
@@ -699,6 +699,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
569,
|
||||||
/**/
|
/**/
|
||||||
568,
|
568,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user