forked from aniani/vim
patch 8.0.0096
Problem: When the input or output is not a tty Vim appears to hang. Solution: Add the --ttyfail argument. Also add the "ttyin" and "ttyout" features to be able to check in Vim script.
This commit is contained in:
@@ -8416,6 +8416,8 @@ tgetent Compiled with tgetent support, able to use a termcap
|
|||||||
timers Compiled with |timer_start()| support.
|
timers Compiled with |timer_start()| support.
|
||||||
title Compiled with window title support |'title'|.
|
title Compiled with window title support |'title'|.
|
||||||
toolbar Compiled with support for |gui-toolbar|.
|
toolbar Compiled with support for |gui-toolbar|.
|
||||||
|
ttyin input is a terminal (tty)
|
||||||
|
ttyout output is a terminal (tty)
|
||||||
unix Unix version of Vim.
|
unix Unix version of Vim.
|
||||||
user_commands User-defined commands.
|
user_commands User-defined commands.
|
||||||
vertsplit Compiled with vertically split windows |:vsplit|.
|
vertsplit Compiled with vertically split windows |:vsplit|.
|
||||||
|
@@ -421,6 +421,10 @@ a slash. Thus "-R" means recovery and "-/R" readonly.
|
|||||||
not connected to a terminal. This will avoid the warning and
|
not connected to a terminal. This will avoid the warning and
|
||||||
the two second delay that would happen. {not in Vi}
|
the two second delay that would happen. {not in Vi}
|
||||||
|
|
||||||
|
*--ttyfail*
|
||||||
|
--ttyfail When the stdin or stdout is not a terminal (tty) then exit
|
||||||
|
right away.
|
||||||
|
|
||||||
*-d*
|
*-d*
|
||||||
-d Start in diff mode, like |vimdiff|.
|
-d Start in diff mode, like |vimdiff|.
|
||||||
{not in Vi} {not available when compiled without the |+diff|
|
{not in Vi} {not available when compiled without the |+diff|
|
||||||
|
@@ -5959,6 +5959,10 @@ f_has(typval_T *argvars, typval_T *rettv)
|
|||||||
}
|
}
|
||||||
else if (STRICMP(name, "vim_starting") == 0)
|
else if (STRICMP(name, "vim_starting") == 0)
|
||||||
n = (starting != 0);
|
n = (starting != 0);
|
||||||
|
else if (STRICMP(name, "ttyin") == 0)
|
||||||
|
n = mch_input_isatty();
|
||||||
|
else if (STRICMP(name, "ttyout") == 0)
|
||||||
|
n = stdout_isatty;
|
||||||
#ifdef FEAT_MBYTE
|
#ifdef FEAT_MBYTE
|
||||||
else if (STRICMP(name, "multi_byte_encoding") == 0)
|
else if (STRICMP(name, "multi_byte_encoding") == 0)
|
||||||
n = has_mbyte;
|
n = has_mbyte;
|
||||||
|
@@ -643,6 +643,8 @@ EXTERN int exiting INIT(= FALSE);
|
|||||||
EXTERN int really_exiting INIT(= FALSE);
|
EXTERN int really_exiting INIT(= FALSE);
|
||||||
/* TRUE when we are sure to exit, e.g., after
|
/* TRUE when we are sure to exit, e.g., after
|
||||||
* a deadly signal */
|
* a deadly signal */
|
||||||
|
EXTERN int stdout_isatty INIT(= TRUE); /* is stdout a terminal? */
|
||||||
|
|
||||||
#if defined(FEAT_AUTOCHDIR)
|
#if defined(FEAT_AUTOCHDIR)
|
||||||
EXTERN int test_autochdir INIT(= FALSE);
|
EXTERN int test_autochdir INIT(= FALSE);
|
||||||
#endif
|
#endif
|
||||||
|
14
src/main.c
14
src/main.c
@@ -973,7 +973,7 @@ common_init(mparm_T *paramp)
|
|||||||
* (needed for :! to * work). mch_check_win() will also handle the -d or
|
* (needed for :! to * work). mch_check_win() will also handle the -d or
|
||||||
* -dev argument.
|
* -dev argument.
|
||||||
*/
|
*/
|
||||||
paramp->stdout_isatty = (mch_check_win(paramp->argc, paramp->argv) != FAIL);
|
stdout_isatty = (mch_check_win(paramp->argc, paramp->argv) != FAIL);
|
||||||
TIME_MSG("window checked");
|
TIME_MSG("window checked");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1828,6 +1828,7 @@ command_line_scan(mparm_T *parmp)
|
|||||||
/* "--literal" take files literally */
|
/* "--literal" take files literally */
|
||||||
/* "--nofork" don't fork */
|
/* "--nofork" don't fork */
|
||||||
/* "--not-a-term" don't warn for not a term */
|
/* "--not-a-term" don't warn for not a term */
|
||||||
|
/* "--ttyfail" exit if not a term */
|
||||||
/* "--noplugin[s]" skip plugins */
|
/* "--noplugin[s]" skip plugins */
|
||||||
/* "--cmd <cmd>" execute cmd before vimrc */
|
/* "--cmd <cmd>" execute cmd before vimrc */
|
||||||
if (STRICMP(argv[0] + argv_idx, "help") == 0)
|
if (STRICMP(argv[0] + argv_idx, "help") == 0)
|
||||||
@@ -1857,6 +1858,8 @@ command_line_scan(mparm_T *parmp)
|
|||||||
p_lpl = FALSE;
|
p_lpl = FALSE;
|
||||||
else if (STRNICMP(argv[0] + argv_idx, "not-a-term", 10) == 0)
|
else if (STRNICMP(argv[0] + argv_idx, "not-a-term", 10) == 0)
|
||||||
parmp->not_a_term = TRUE;
|
parmp->not_a_term = TRUE;
|
||||||
|
else if (STRNICMP(argv[0] + argv_idx, "ttyfail", 7) == 0)
|
||||||
|
parmp->tty_fail = TRUE;
|
||||||
else if (STRNICMP(argv[0] + argv_idx, "cmd", 3) == 0)
|
else if (STRNICMP(argv[0] + argv_idx, "cmd", 3) == 0)
|
||||||
{
|
{
|
||||||
want_argument = TRUE;
|
want_argument = TRUE;
|
||||||
@@ -2489,7 +2492,7 @@ check_tty(mparm_T *parmp)
|
|||||||
if (!input_isatty)
|
if (!input_isatty)
|
||||||
silent_mode = TRUE;
|
silent_mode = TRUE;
|
||||||
}
|
}
|
||||||
else if (parmp->want_full_screen && (!parmp->stdout_isatty || !input_isatty)
|
else if (parmp->want_full_screen && (!stdout_isatty || !input_isatty)
|
||||||
#ifdef FEAT_GUI
|
#ifdef FEAT_GUI
|
||||||
/* don't want the delay when started from the desktop */
|
/* don't want the delay when started from the desktop */
|
||||||
&& !gui.starting
|
&& !gui.starting
|
||||||
@@ -2504,7 +2507,7 @@ check_tty(mparm_T *parmp)
|
|||||||
* input buffer so fast I can't even kill the process in under 2
|
* input buffer so fast I can't even kill the process in under 2
|
||||||
* minutes (and it beeps continuously the whole time :-)
|
* minutes (and it beeps continuously the whole time :-)
|
||||||
*/
|
*/
|
||||||
if (netbeans_active() && (!parmp->stdout_isatty || !input_isatty))
|
if (netbeans_active() && (!stdout_isatty || !input_isatty))
|
||||||
{
|
{
|
||||||
mch_errmsg(_("Vim: Error: Failure to start gvim from NetBeans\n"));
|
mch_errmsg(_("Vim: Error: Failure to start gvim from NetBeans\n"));
|
||||||
exit(1);
|
exit(1);
|
||||||
@@ -2517,11 +2520,13 @@ check_tty(mparm_T *parmp)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (!parmp->stdout_isatty)
|
if (!stdout_isatty)
|
||||||
mch_errmsg(_("Vim: Warning: Output is not to a terminal\n"));
|
mch_errmsg(_("Vim: Warning: Output is not to a terminal\n"));
|
||||||
if (!input_isatty)
|
if (!input_isatty)
|
||||||
mch_errmsg(_("Vim: Warning: Input is not from a terminal\n"));
|
mch_errmsg(_("Vim: Warning: Input is not from a terminal\n"));
|
||||||
out_flush();
|
out_flush();
|
||||||
|
if (parmp->tty_fail && (!stdout_isatty || !input_isatty))
|
||||||
|
exit(1);
|
||||||
if (scriptin[0] == NULL)
|
if (scriptin[0] == NULL)
|
||||||
ui_delay(2000L, TRUE);
|
ui_delay(2000L, TRUE);
|
||||||
TIME_MSG("Warning delay");
|
TIME_MSG("Warning delay");
|
||||||
@@ -3287,6 +3292,7 @@ usage(void)
|
|||||||
#endif
|
#endif
|
||||||
main_msg(_("-T <terminal>\tSet terminal type to <terminal>"));
|
main_msg(_("-T <terminal>\tSet terminal type to <terminal>"));
|
||||||
main_msg(_("--not-a-term\t\tSkip warning for input/output not being a terminal"));
|
main_msg(_("--not-a-term\t\tSkip warning for input/output not being a terminal"));
|
||||||
|
main_msg(_("--ttyfail\t\tExit if input or output is not a terminal"));
|
||||||
main_msg(_("-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"));
|
main_msg(_("-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"));
|
||||||
#ifdef FEAT_GUI
|
#ifdef FEAT_GUI
|
||||||
main_msg(_("-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"));
|
main_msg(_("-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"));
|
||||||
|
@@ -3225,8 +3225,8 @@ typedef struct
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
int want_full_screen;
|
int want_full_screen;
|
||||||
int stdout_isatty; /* is stdout a terminal? */
|
|
||||||
int not_a_term; /* no warning for missing term? */
|
int not_a_term; /* no warning for missing term? */
|
||||||
|
int tty_fail; /* exit if not a tty */
|
||||||
char_u *term; /* specified terminal name */
|
char_u *term; /* specified terminal name */
|
||||||
#ifdef FEAT_CRYPT
|
#ifdef FEAT_CRYPT
|
||||||
int ask_for_key; /* -x argument */
|
int ask_for_key; /* -x argument */
|
||||||
|
@@ -764,6 +764,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 */
|
||||||
|
/**/
|
||||||
|
96,
|
||||||
/**/
|
/**/
|
||||||
95,
|
95,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user