From b38165e385fd9f1bb66d020d48cb2d09348ba657 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Wed, 5 May 2021 18:48:13 +0200 Subject: [PATCH] enter: Save and restore the terminal settings. On some systems, the backspace key no longer worked the enter subcommand exited. --- micoforia.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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; } -- 2.39.2