summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2023-05-21 13:51:06 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2023-05-21 14:01:27 +0900
commit16b0aeda7dda8790d026873f5efd7d6fb344a1dd (patch)
tree52d1dad610db8a4f3cc8a97c32cbfa3b934c6f61
parent86e4f4a84180da7f5b99c3db8043cb9d92cb9189 (diff)
Make sure 'become' process is given a proper tty device
-rw-r--r--src/terminal.go8
-rwxr-xr-xtest/test_go.rb5
2 files changed, 13 insertions, 0 deletions
diff --git a/src/terminal.go b/src/terminal.go
index f25cd2f3..7f6adade 100644
--- a/src/terminal.go
+++ b/src/terminal.go
@@ -2961,6 +2961,14 @@ func (t *Terminal) Loop() {
if t.history != nil {
t.history.append(string(t.input))
}
+ /*
+ FIXME: It is not at all clear why this is required.
+ The following command will report 'not a tty', unless we open
+ /dev/tty *twice* after closing the standard input for 'reload'
+ in Reader.terminate().
+ : | fzf --bind 'start:reload:ls' --bind 'enter:become:tty'
+ */
+ tui.TtyIn()
util.SetStdin(tui.TtyIn())
syscall.Exec(shellPath, []string{shell, "-c", command}, os.Environ())
}
diff --git a/test/test_go.rb b/test/test_go.rb
index 1f4245ab..f7dcfe6e 100755
--- a/test/test_go.rb
+++ b/test/test_go.rb
@@ -2921,6 +2921,11 @@ class TestGoFZF < TestBase
OUTPUT
tmux.until { assert_block(expected, _1) }
end
+
+ def test_become_tty
+ tmux.send_keys "sleep 0.5 | #{FZF} --bind 'start:reload:ls' --bind 'load:become:tty'", :Enter
+ tmux.until { |lines| assert_includes lines, '/dev/tty' }
+ end
end
module TestShell