From 86d92c17c4ad9ff12d550680208c0eae98dd776b Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Wed, 15 May 2024 00:28:56 +0900 Subject: [PATCH] Refactor tui.TtyIn() --- src/terminal.go | 10 ---------- src/tui/light_unix.go | 8 ++++++++ src/tui/ttyname_unix.go | 13 +++---------- 3 files changed, 11 insertions(+), 20 deletions(-) diff --git a/src/terminal.go b/src/terminal.go index bdbc6bb..5179b0c 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -3471,16 +3471,6 @@ func (t *Terminal) Loop() error { 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(). - - while : | fzf --bind 'start:reload:ls' --bind 'load:become:tty'; do echo; done - */ - tui.TtyIn() t.executor.Become(tui.TtyIn(), t.environ(), command) } case actExecute, actExecuteSilent: diff --git a/src/tui/light_unix.go b/src/tui/light_unix.go index e59c72e..8d5a279 100644 --- a/src/tui/light_unix.go +++ b/src/tui/light_unix.go @@ -7,6 +7,7 @@ import ( "os" "os/exec" "strings" + "sync" "syscall" "github.com/junegunn/fzf/src/util" @@ -18,6 +19,7 @@ var ( tty string ttyin *os.File ttyout *os.File + mutex sync.Mutex ) func IsLightRendererSupported() bool { @@ -71,6 +73,9 @@ func openTty(mode int) (*os.File, error) { } func openTtyIn() (*os.File, error) { + mutex.Lock() + defer mutex.Unlock() + if ttyin != nil { return ttyin, nil } @@ -82,6 +87,9 @@ func openTtyIn() (*os.File, error) { } func openTtyOut() (*os.File, error) { + mutex.Lock() + defer mutex.Unlock() + if ttyout != nil { return ttyout, nil } diff --git a/src/tui/ttyname_unix.go b/src/tui/ttyname_unix.go index bc6fe96..384115f 100644 --- a/src/tui/ttyname_unix.go +++ b/src/tui/ttyname_unix.go @@ -36,15 +36,8 @@ func ttyname() string { // TtyIn returns terminal device to be used as STDIN, falls back to os.Stdin func TtyIn() *os.File { - in, err := os.OpenFile(consoleDevice, syscall.O_RDONLY, 0) - if err != nil { - tty := ttyname() - if len(tty) > 0 { - if in, err := os.OpenFile(tty, syscall.O_RDONLY, 0); err == nil { - return in - } - } - return os.Stdin + if in, err := openTtyIn(); err == nil { + return in } - return in + return os.Stdin }