If tmux wasn't already running it would output an error but still work. The new approach will suppress that since we're not concerned if it's already running or not, just whether the desired session is. Modified the live macOS args to support connecting to the HW-Diags session remotely (more easily at least).
74 lines
2.4 KiB
Bash
Executable file
74 lines
2.4 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
## Wizard Kit: TMUX Launcher
|
|
|
|
# Live macOS env workaround
|
|
tmux_args=()
|
|
if [[ -e "/.wk-live-macos" ]]; then
|
|
tmux_args=(-f "/etc/tmux.conf" -S "/Volumes/RAM_Disk/.tmux.socket")
|
|
fi
|
|
|
|
function ask() {
|
|
while :; do
|
|
read -p "$1 [Y/N] " -r answer
|
|
if echo "$answer" | grep -Eiq '^(y|yes|sure)$'; then
|
|
return 0
|
|
elif echo "$answer" | grep -Eiq '^(n|no|nope)$'; then
|
|
return 1
|
|
fi
|
|
done
|
|
}
|
|
|
|
function err () {
|
|
echo "$0:" "$@" >&2
|
|
return 1
|
|
}
|
|
|
|
function launch_in_tmux() {
|
|
# Check for required vars
|
|
[[ -n "${SESSION_NAME:-}" ]] || return $(err "Required variable missing (SESSION_NAME)")
|
|
[[ -n "${WINDOW_NAME:-}" ]] || return $(err "Required variable missing (WINDOW_NAME)")
|
|
[[ -n "${TMUX_CMD:-}" ]] || return $(err "Required variable missing (TMUX_CMD)")
|
|
|
|
# Check for running session
|
|
if tmux "${tmux_args[@]}" list-session 2>&1 | grep -q "$SESSION_NAME"; then
|
|
echo "WARNING: tmux session $SESSION_NAME already exists."
|
|
echo ""
|
|
if ask "Connect to current session?"; then
|
|
if [[ -n "${TMUX:-}" ]]; then
|
|
# Running inside TMUX, switch to session
|
|
tmux "${tmux_args[@]}" switch-client -t "$SESSION_NAME"
|
|
if ! jobs %% >/dev/null 2>&1; then
|
|
# No running jobs, try exiting abandoned tmux session
|
|
exit 0
|
|
fi
|
|
else
|
|
# Running outside TMUX, attach to session
|
|
tmux "${tmux_args[@]}" attach-session -t "$SESSION_NAME"
|
|
fi
|
|
return 0
|
|
elif ask "Kill current session and start new session?"; then
|
|
tmux "${tmux_args[@]}" kill-session -t "$SESSION_NAME" || \
|
|
die "Failed to kill session: $SESSION_NAME"
|
|
else
|
|
echo "Aborted."
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
# Start session
|
|
if [[ -n "${TMUX:-}" ]]; then
|
|
# Running inside TMUX, save current session/window names
|
|
ORIGINAL_SESSION_NAME="$(tmux "${tmux_args[@]}" display-message -p '#S')"
|
|
ORIGINAL_WINDOW_NAME="$(tmux "${tmux_args[@]}" display-message -p '#W')"
|
|
tmux "${tmux_args[@]}" rename-session "$SESSION_NAME"
|
|
tmux "${tmux_args[@]}" rename-window "$WINDOW_NAME"
|
|
"$TMUX_CMD" "$@"
|
|
# Restore previous session/window names
|
|
tmux "${tmux_args[@]}" rename-session "${ORIGINAL_SESSION_NAME}"
|
|
tmux "${tmux_args[@]}" rename-window "${ORIGINAL_WINDOW_NAME}"
|
|
else
|
|
# Running outside TMUX, start/attach to session
|
|
tmux "${tmux_args[@]}" new-session -s "$SESSION_NAME" -n "$WINDOW_NAME" "$TMUX_CMD" "$@"
|
|
fi
|
|
}
|