Skip to content

Commit

Permalink
Refactor tui.TtyIn()
Browse files Browse the repository at this point in the history
  • Loading branch information
junegunn committed May 14, 2024
1 parent c4cc789 commit 86d92c1
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 20 deletions.
10 changes: 0 additions & 10 deletions src/terminal.go
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
8 changes: 8 additions & 0 deletions src/tui/light_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"os"
"os/exec"
"strings"
"sync"
"syscall"

"github.com/junegunn/fzf/src/util"
Expand All @@ -18,6 +19,7 @@ var (
tty string
ttyin *os.File
ttyout *os.File
mutex sync.Mutex
)

func IsLightRendererSupported() bool {
Expand Down Expand Up @@ -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
}
Expand All @@ -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
}
Expand Down
13 changes: 3 additions & 10 deletions src/tui/ttyname_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

0 comments on commit 86d92c1

Please sign in to comment.