138 lines
3.6 KiB
Bash
Executable File
138 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Open iTerm2 tabs for all active sessions (or a specific project)
|
|
# Usage: ~/claude-open-all [--new-window] [integrator|splitly|all]
|
|
|
|
NEW_WINDOW=false
|
|
PROJECT=""
|
|
|
|
# Parse arguments
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--new-window|-w)
|
|
NEW_WINDOW=true
|
|
;;
|
|
integrator|i|splitly|s|safesplit|agent-orchestrator|ao|all)
|
|
PROJECT="$arg"
|
|
;;
|
|
*)
|
|
echo "Unknown argument: $arg"
|
|
echo "Usage: ~/claude-open-all [--new-window] [integrator|splitly|ao|all]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
PROJECT="${PROJECT:-all}"
|
|
|
|
get_sessions() {
|
|
local prefix="$1"
|
|
tmux list-sessions -F '#{session_name}' 2>/dev/null | grep "^${prefix}-" | sort
|
|
}
|
|
|
|
open_session_new_window() {
|
|
local session="$1"
|
|
osascript -e "
|
|
tell application \"iTerm2\"
|
|
activate
|
|
set newWindow to (create window with default profile)
|
|
tell current session of newWindow
|
|
set name to \"$session\"
|
|
write text \"printf '\\\\033]0;$session\\\\007' && tmux attach -t $session\"
|
|
end tell
|
|
end tell
|
|
"
|
|
}
|
|
|
|
open_session_new_tab() {
|
|
local session="$1"
|
|
osascript -e "
|
|
tell application \"iTerm2\"
|
|
activate
|
|
tell current window
|
|
create tab with default profile
|
|
tell current session
|
|
set name to \"$session\"
|
|
write text \"printf '\\\\033]0;$session\\\\007' && tmux attach -t $session\"
|
|
end tell
|
|
end tell
|
|
end tell
|
|
"
|
|
}
|
|
|
|
switch_to_existing_tab() {
|
|
local session="$1"
|
|
osascript -e "
|
|
tell application \"iTerm2\"
|
|
activate
|
|
repeat with aWindow in windows
|
|
repeat with aTab in tabs of aWindow
|
|
repeat with aSession in sessions of aTab
|
|
try
|
|
if profile name of aSession is equal to \"$session\" then
|
|
select aWindow
|
|
select aTab
|
|
return \"FOUND\"
|
|
end if
|
|
end try
|
|
end repeat
|
|
end repeat
|
|
end repeat
|
|
return \"NOT_FOUND\"
|
|
end tell
|
|
"
|
|
}
|
|
|
|
SESSIONS=()
|
|
|
|
case "$PROJECT" in
|
|
integrator|i)
|
|
SESSIONS=($(get_sessions "integrator"))
|
|
echo "Opening ${#SESSIONS[@]} integrator sessions..."
|
|
;;
|
|
splitly|s|safesplit)
|
|
SESSIONS=($(get_sessions "splitly"))
|
|
echo "Opening ${#SESSIONS[@]} splitly sessions..."
|
|
;;
|
|
agent-orchestrator|ao)
|
|
SESSIONS=($(get_sessions "ao"))
|
|
echo "Opening ${#SESSIONS[@]} ao sessions..."
|
|
;;
|
|
all|"")
|
|
SESSIONS=($(get_sessions "integrator") $(get_sessions "splitly") $(get_sessions "ao"))
|
|
echo "Opening ${#SESSIONS[@]} total sessions..."
|
|
;;
|
|
esac
|
|
|
|
if [ ${#SESSIONS[@]} -eq 0 ]; then
|
|
echo "No sessions found."
|
|
exit 0
|
|
fi
|
|
|
|
if [ "$NEW_WINDOW" = true ]; then
|
|
echo "(in new window)"
|
|
fi
|
|
echo ""
|
|
|
|
FIRST=true
|
|
for session in "${SESSIONS[@]}"; do
|
|
# Check if tab already exists
|
|
existing=$(switch_to_existing_tab "$session" 2>/dev/null)
|
|
|
|
if [ "$existing" = "FOUND" ]; then
|
|
echo " Switched to existing: $session"
|
|
elif [ "$NEW_WINDOW" = true ] && [ "$FIRST" = true ]; then
|
|
echo " Opening (new window): $session"
|
|
open_session_new_window "$session"
|
|
FIRST=false
|
|
else
|
|
echo " Opening (new tab): $session"
|
|
open_session_new_tab "$session"
|
|
fi
|
|
sleep 0.3
|
|
done
|
|
|
|
echo ""
|
|
echo "Done! Opened ${#SESSIONS[@]} iTerm2 tabs."
|
|
echo "Use Cmd+Shift+[ or ] to switch between tabs."
|