72 lines
2.7 KiB
Go
72 lines
2.7 KiB
Go
package tmux
|
|
|
|
import "fmt"
|
|
|
|
// newSessionArgs builds args for `tmux new-session -d -s <id> -x 220 -y 50
|
|
// -c <cwd> <shell> -c <launchCmd>`. The shell -c form runs the launch command
|
|
// inside the configured shell so exported env vars and quoting work correctly.
|
|
func newSessionArgs(id, cwd, shellPath, launchCmd string) []string {
|
|
return []string{
|
|
"new-session", "-d",
|
|
"-s", id,
|
|
"-x", "220",
|
|
"-y", "50",
|
|
"-c", cwd,
|
|
shellPath, "-c", launchCmd,
|
|
}
|
|
}
|
|
|
|
// setStatusOffArgs hides the tmux status bar for the given session.
|
|
// set-option uses pane-targeting syntax which does not accept the `=` prefix,
|
|
// so we pass the session name directly.
|
|
func setStatusOffArgs(id string) []string {
|
|
return []string{"set-option", "-t", id, "status", "off"}
|
|
}
|
|
|
|
// setMouseOnArgs enables tmux mouse mode so the terminal's SGR mouse-wheel
|
|
// reports scroll the pane via copy-mode; without it, wheel scrolling no-ops.
|
|
// Pane-targeting, so no `=` prefix (see setStatusOffArgs).
|
|
func setMouseOnArgs(id string) []string {
|
|
return []string{"set-option", "-t", id, "mouse", "on"}
|
|
}
|
|
|
|
// killSessionArgs builds args for `tmux kill-session -t =<id>`. The `=` prefix
|
|
// requests exact-name matching so a session "foo" does not accidentally match
|
|
// "foobar" (tmux otherwise does unique-prefix matching).
|
|
func killSessionArgs(id string) []string {
|
|
return []string{"kill-session", "-t", exactSessionTarget(id)}
|
|
}
|
|
|
|
// hasSessionArgs builds args for `tmux has-session -t =<id>`. The `=` prefix
|
|
// requests exact-name matching (see killSessionArgs).
|
|
func hasSessionArgs(id string) []string {
|
|
return []string{"has-session", "-t", exactSessionTarget(id)}
|
|
}
|
|
|
|
// exactSessionTarget wraps id in tmux's exact-match prefix `=` so session-
|
|
// selection commands (-t) target only the session with that precise name.
|
|
// Only kill-session and has-session support this prefix; pane-targeting
|
|
// commands (send-keys, capture-pane, set-option) use a plain session name.
|
|
func exactSessionTarget(id string) string {
|
|
return "=" + id
|
|
}
|
|
|
|
// sendKeysLiteralArgs builds args for `tmux send-keys -t <id> -l <chunk>`.
|
|
// The -l flag stops tmux interpreting words like "Enter" as key names so the
|
|
// text is sent verbatim.
|
|
func sendKeysLiteralArgs(id, chunk string) []string {
|
|
return []string{"send-keys", "-t", id, "-l", chunk}
|
|
}
|
|
|
|
// sendEnterArgs builds args for `tmux send-keys -t <id> Enter` to submit the
|
|
// queued input.
|
|
func sendEnterArgs(id string) []string {
|
|
return []string{"send-keys", "-t", id, "Enter"}
|
|
}
|
|
|
|
// capturePaneArgs builds args for `tmux capture-pane -t <id> -p -S -<lines>`.
|
|
// -p prints to stdout; -S -<n> starts n lines back in history.
|
|
func capturePaneArgs(id string, lines int) []string {
|
|
return []string{"capture-pane", "-t", id, "-p", "-S", fmt.Sprintf("-%d", lines)}
|
|
}
|