summaryrefslogtreecommitdiff
path: root/scripts/tmux-cycle-a-session
blob: 2b4557ab6834fddcb4cbd5304186c71751da0ed5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/env bash
# Cycle through tmux sessions whose name starts with "A-".
# Usage: tmux-cycle-a-session next|prev
set -euo pipefail

direction="${1:-next}"

mapfile -t sessions < <(tmux list-sessions -F '#S' | grep '^A-' | sort)
[ "${#sessions[@]}" -eq 0 ] && exit 0

cur=$(tmux display-message -p '#S')

# Find current index (0-based); -1 if not found
idx=-1
for i in "${!sessions[@]}"; do
    if [ "${sessions[$i]}" = "$cur" ]; then
        idx=$i
        break
    fi
done

n="${#sessions[@]}"
case "$direction" in
    next) target_idx=$(( idx < 0 ? 0 : (idx + 1) % n )) ;;
    prev) target_idx=$(( idx < 0 ? n - 1 : (idx - 1 + n) % n )) ;;
    *)    echo "usage: $0 next|prev" >&2; exit 2 ;;
esac

tmux switch-client -t "${sessions[$target_idx]}"