From: Andre Noll Date: Wed, 5 May 2021 16:48:13 +0000 (+0200) Subject: enter: Save and restore the terminal settings. X-Git-Url: http://git.tuebingen.mpg.de/releases/paraslash-0.2.17.tar.bz2.asc?a=commitdiff_plain;h=b38165e385fd9f1bb66d020d48cb2d09348ba657;p=micoforia.git enter: Save and restore the terminal settings. On some systems, the backspace key no longer worked the enter subcommand exited. --- diff --git a/micoforia.c b/micoforia.c index 6e10a0c..b09f352 100644 --- a/micoforia.c +++ b/micoforia.c @@ -1929,6 +1929,8 @@ static bool com_enter(void) bool success; int ret, pid; char *errctx; + struct termios tios; + bool tty; ret = lls_check_arg_count(sublpr, 1, INT_MAX, &errctx); if (ret < 0) @@ -1951,7 +1953,21 @@ static bool com_enter(void) : dflt_cmd[n]; argv[N - 1] = NULL; clean_env(); + tty = false; + if (isatty(STDIN_FILENO) && isatty(STDOUT_FILENO)) { + if (tcgetattr(STDIN_FILENO, &tios) >= 0) + tty = true; + } success = xexec(argv, NULL); + if (tty) { /* reset terminal settings */ + /* + * First give up the controlling terminal. Without this, the + * command gets SIGSTOP and goes to the background. We ignore + * errors here because nobody cares about a messed up terminal. + */ + ioctl(STDIN_FILENO, TIOCNOTTY); + tcsetattr(STDIN_FILENO, TCSAFLUSH, &tios); + } free(argv); return success; }