diff --git a/scripts/launch-in-tmux b/scripts/launch-in-tmux index f0940b00..de9483a8 100755 --- a/scripts/launch-in-tmux +++ b/scripts/launch-in-tmux @@ -5,23 +5,23 @@ # Live macOS env workaround tmux_args=() if [[ -e "/.wk-live-macos" ]]; then - tmux_args=(-f "/etc/tmux.conf" -S "$(mktemp).socket") + 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 + 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 + echo "$0:" "$@" >&2 + return 1 } function launch_in_tmux() { @@ -31,44 +31,44 @@ function launch_in_tmux() { [[ -n "${TMUX_CMD:-}" ]] || return $(err "Required variable missing (TMUX_CMD)") # Check for running session - if tmux "${tmux_args[@]}" list-session | 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" + 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 - echo "Aborted." - return 1 + # 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}" + # 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" "$@" + # Running outside TMUX, start/attach to session + tmux "${tmux_args[@]}" new-session -s "$SESSION_NAME" -n "$WINDOW_NAME" "$TMUX_CMD" "$@" fi }