summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2021-03-25 19:56:18 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2021-03-25 20:00:09 +0900
commitf84b3de24b63e2e26cbfa2a24e61a4173824fffd (patch)
tree25628bb12f52c80c0b9cd4173b7512ce32139001 /src
parent6a1f3ec08b3bbe11d527cd9b32ac6275df11dbf9 (diff)
Automatically set /dev/tty as STDIN on execute action
https://github.com/junegunn/fzf/issues/1360#issuecomment-788178140 # Redirect /dev/tty to suppress "Vim: Warning: Input is not from a terminal" ls | fzf --bind "enter:execute(vim {} < /dev/tty)" # With this change, we can omit "< /dev/tty" part ls | fzf --bind "enter:execute(vim {})"
Diffstat (limited to 'src')
-rw-r--r--src/terminal.go2
-rw-r--r--src/tui/ttyname_unix.go16
-rw-r--r--src/tui/ttyname_windows.go7
3 files changed, 24 insertions, 1 deletions
diff --git a/src/terminal.go b/src/terminal.go
index 53a32769..263e2c54 100644
--- a/src/terminal.go
+++ b/src/terminal.go
@@ -1723,7 +1723,7 @@ func (t *Terminal) executeCommand(template string, forcePlus bool, background bo
command := t.replacePlaceholder(template, forcePlus, string(t.input), list)
cmd := util.ExecCommand(command, false)
if !background {
- cmd.Stdin = os.Stdin
+ cmd.Stdin = tui.TtyIn()
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
t.tui.Pause(true)
diff --git a/src/tui/ttyname_unix.go b/src/tui/ttyname_unix.go
index 69bdfa54..68298cdc 100644
--- a/src/tui/ttyname_unix.go
+++ b/src/tui/ttyname_unix.go
@@ -4,6 +4,7 @@ package tui
import (
"io/ioutil"
+ "os"
"syscall"
)
@@ -29,3 +30,18 @@ func ttyname() string {
}
return ""
}
+
+// 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
+ }
+ return in
+}
diff --git a/src/tui/ttyname_windows.go b/src/tui/ttyname_windows.go
index 5354b747..8db490ad 100644
--- a/src/tui/ttyname_windows.go
+++ b/src/tui/ttyname_windows.go
@@ -2,6 +2,13 @@
package tui
+import "os"
+
func ttyname() string {
return ""
}
+
+// TtyIn on Windows returns os.Stdin
+func TtyIn() *os.File {
+ return os.Stdin
+}