pathScripts/tmux-merge

42 lines
1.5 KiB
Text
Raw Normal View History

2024-06-23 22:47:43 +02:00
#!/bin/bash
# Get the first session as the target for all panes
target_session=$(tmux list-sessions -F '#{session_name}' | head -n 1)
target_window="${target_session}:0" # assuming the first window is index 0
target_pane="${target_window}.0" # assuming the first pane is index 0
# Loop through each session
tmux list-sessions -F '#{session_name}' | while read session; do
# Skip the target session
if [[ "$session" == "$target_session" ]]; then
continue
fi
# Loop through each window in the session
tmux list-windows -t "$session" -F '#{window_index}' | while read window; do
# Loop through each pane in the window
tmux list-panes -t "${session}:${window}" -F '#{pane_index}' | while read pane; do
source="${session}:${window}.${pane}"
# Check if the source is not the same as the target
if [[ "$source" != "$target_pane" ]]; then
# Join the pane to the target pane
tmux join-pane -s "$source" -t "$target_pane"
fi
done
done
# After moving all panes from a session, kill the now-empty session
# Check if the session to be killed is not the target session
if [[ "$session" != "$target_session" ]]; then
tmux kill-session -t "$session"
fi
done
# After moving all panes, you may want to manually adjust the layout.
# For a simple automatic layout adjustment, you can use:
tmux select-layout -t "$target_window" tiled
# Attach to the master session after everything is merged
tmux attach-session -t "$target_session"