42 lines
1.5 KiB
Text
42 lines
1.5 KiB
Text
|
#!/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"
|
||
|
|