Use FindExe to find the tmux executable and return a nicer error message when running tmux fails
This commit is contained in:
parent
09ebdcd809
commit
514888a274
@ -5,7 +5,6 @@ package tui
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"kitty/tools/utils"
|
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@ -15,10 +14,16 @@ import (
|
|||||||
|
|
||||||
"github.com/shirou/gopsutil/v3/process"
|
"github.com/shirou/gopsutil/v3/process"
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
|
|
||||||
|
"kitty/tools/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ = fmt.Print
|
var _ = fmt.Print
|
||||||
|
|
||||||
|
var TmuxExe = (&utils.Once[string]{Run: func() string {
|
||||||
|
return utils.FindExe("tmux")
|
||||||
|
}}).Get
|
||||||
|
|
||||||
func tmux_socket_address() (socket string) {
|
func tmux_socket_address() (socket string) {
|
||||||
socket = os.Getenv("TMUX")
|
socket = os.Getenv("TMUX")
|
||||||
if socket == "" {
|
if socket == "" {
|
||||||
@ -53,13 +58,14 @@ func tmux_socket_address() (socket string) {
|
|||||||
var TmuxSocketAddress = (&utils.Once[string]{Run: tmux_socket_address}).Get
|
var TmuxSocketAddress = (&utils.Once[string]{Run: tmux_socket_address}).Get
|
||||||
|
|
||||||
func tmux_allow_passthrough() error {
|
func tmux_allow_passthrough() error {
|
||||||
c := exec.Command("tmux", "show", "-Ap", "allow-passthrough")
|
cmd := []string{TmuxExe(), "show", "-Ap", "allow-passthrough"}
|
||||||
|
c := exec.Command(cmd[0], cmd[1:]...)
|
||||||
allowed, not_allowed := errors.New("allowed"), errors.New("not allowed")
|
allowed, not_allowed := errors.New("allowed"), errors.New("not allowed")
|
||||||
get_result := make(chan error)
|
get_result := make(chan error)
|
||||||
go func() {
|
go func() {
|
||||||
output, err := c.Output()
|
output, err := c.Output()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
get_result <- err
|
get_result <- fmt.Errorf("Running %s failed with error: %w", strings.Join(cmd, " "), err)
|
||||||
} else {
|
} else {
|
||||||
q := strings.TrimSpace(utils.UnsafeBytesToString(output))
|
q := strings.TrimSpace(utils.UnsafeBytesToString(output))
|
||||||
if strings.HasSuffix(q, " on") || strings.HasSuffix(q, " all") {
|
if strings.HasSuffix(q, " on") || strings.HasSuffix(q, " all") {
|
||||||
@ -77,7 +83,12 @@ func tmux_allow_passthrough() error {
|
|||||||
if r != not_allowed {
|
if r != not_allowed {
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
return exec.Command("tmux", "set", "-p", "allow-passthrough", "on").Run()
|
cmd := []string{TmuxExe(), "set", "-p", "allow-passthrough", "on"}
|
||||||
|
err := exec.Command(cmd[0], cmd[1:]...).Run()
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("Running %s failed with error: %w", strings.Join(cmd, " "), err)
|
||||||
|
}
|
||||||
|
return err
|
||||||
case <-time.After(2 * time.Second):
|
case <-time.After(2 * time.Second):
|
||||||
return fmt.Errorf("Tmux command timed out. This often happens when the version of tmux on your PATH is older than the version of the running tmux server")
|
return fmt.Errorf("Tmux command timed out. This often happens when the version of tmux on your PATH is older than the version of the running tmux server")
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user