diff --git a/src/reader.cpp b/src/reader.cpp index ce94a112c..af08ea2b2 100644 --- a/src/reader.cpp +++ b/src/reader.cpp @@ -2828,13 +2828,19 @@ struct readline_loop_state_t { /// Run a sequence of commands from an input binding. void reader_data_t::run_input_command_scripts(const wcstring_list_t &cmds) { // Need to donate/steal the tty - see #2114. - term_donate(); + // Unfortunately this causes us to enable ECHO, + // which means if input arrives while we're running a bind function + // it will turn up on screen, see #7770. + // + // What needs to happen is to tell the parser to acquire the terminal + // when it's running an external command, but that's a lot more involved. + // term_donate(); auto last_statuses = parser().get_last_statuses(); for (const wcstring &cmd : cmds) { parser().eval(cmd, io_chain_t{}); } parser().set_last_statuses(std::move(last_statuses)); - term_steal(); + // term_steal(); } /// Read normal characters, inserting them into the command line. diff --git a/tests/pexpects/fg.py b/tests/pexpects/fg.py index 7ad86ab77..1089a811b 100644 --- a/tests/pexpects/fg.py +++ b/tests/pexpects/fg.py @@ -92,11 +92,13 @@ send("\x12") # ctrl-r, placing fth in foreground expect_str("SIGCONT") # Do it again. -send("\x1A") -expect_str("SIGTSTP") -sleep(0.1) -send("\x12") -expect_str("SIGCONT") +# FIXME: Unfortunately the fix for #2114 had to be reverted because of #7770, +# so this is broken. +# send("\x1A") +# expect_str("SIGTSTP") +# sleep(0.1) +# send("\x12") +# expect_str("SIGCONT") # End fth by sending it anything. send("\x12")