lineedit: don't fall back to simple line input if tty is in raw mode

Testcase: shell command input after python ^Z should still work

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2014-12-10 17:22:13 +01:00
parent 202d9a6464
commit d598a8d4e6

View File

@ -2256,9 +2256,13 @@ int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *comman
INIT_S(); INIT_S();
if (tcgetattr(STDIN_FILENO, &initial_settings) < 0 if (tcgetattr(STDIN_FILENO, &initial_settings) < 0
|| !(initial_settings.c_lflag & ECHO) || (initial_settings.c_lflag & (ECHO|ICANON)) == ICANON
) { ) {
/* Happens when e.g. stty -echo was run before */ /* Happens when e.g. stty -echo was run before.
* But if ICANON is not set, we don't come here.
* (example: interactive python ^Z-backgrounded,
* tty is still in "raw mode").
*/
parse_and_put_prompt(prompt); parse_and_put_prompt(prompt);
/* fflush_all(); - done by parse_and_put_prompt */ /* fflush_all(); - done by parse_and_put_prompt */
if (fgets(command, maxsize, stdin) == NULL) if (fgets(command, maxsize, stdin) == NULL)