0
0
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:
Bram Moolenaar
2022-09-24 12:50:45 +01:00
parent e9dcf13a30
commit 5939c35743
3 changed files with 50 additions and 2 deletions

View File

@@ -6793,10 +6793,33 @@ nv_esc(cmdarg_T *cap)
&& !VIsual_active
&& 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())
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
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)

View File

@@ -1109,6 +1109,29 @@ func Test_not_a_term()
call delete('Xvimout')
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
func Test_w_arg()

View File

@@ -699,6 +699,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
569,
/**/
568,
/**/