5fecb6d215
Add OSC 777 notification sender, Cursor/Claude hook adapters, config/install commands, and README for Ghostty + tmux setup. Co-authored-by: Cursor <cursoragent@cursor.com>
47 lines
901 B
Go
47 lines
901 B
Go
package tmux
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
)
|
|
|
|
func InTmux() bool {
|
|
return os.Getenv("TMUX") != ""
|
|
}
|
|
|
|
func ClientTTY() (string, error) {
|
|
if !InTmux() {
|
|
return "", nil
|
|
}
|
|
out, err := exec.Command("tmux", "display-message", "-p", "#{client_tty}").Output()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return strings.TrimSpace(string(out)), nil
|
|
}
|
|
|
|
func WrapPassthrough(seq string) string {
|
|
return "\033Ptmux;\033" + seq + "\033\\"
|
|
}
|
|
|
|
func WrapPassthroughLayers(seq string, layers int) string {
|
|
out := seq
|
|
for i := 0; i < layers; i++ {
|
|
out = WrapPassthrough(out)
|
|
}
|
|
return out
|
|
}
|
|
|
|
func AllowPassthroughEnabled() (bool, string, error) {
|
|
if !InTmux() {
|
|
return true, "", nil
|
|
}
|
|
out, err := exec.Command("tmux", "show-option", "-gv", "allow-passthrough").Output()
|
|
if err != nil {
|
|
return false, "", err
|
|
}
|
|
val := strings.TrimSpace(string(out))
|
|
return val == "on" || val == "all", val, nil
|
|
}
|