59 lines
1.6 KiB
Bash
Executable File
59 lines
1.6 KiB
Bash
Executable File
#! /bin/bash
|
|
|
|
for file in {$PWD,$HOME}/.tmuxify.layout; do
|
|
test -f $file && layout=$file && break
|
|
done
|
|
|
|
if [[ ! -f $layout ]]; then
|
|
echo "Aborting. No $PWD/.tmuxify.layout nor $HOME/.tmuxify.layout found."
|
|
exit 1
|
|
fi
|
|
|
|
session=${1:-$(basename $PWD | tr . -)}
|
|
|
|
if [[ -z $(tmux ls -F "#{session_name}" 2>/dev/null | grep "^$session$") ]]; then
|
|
tmux $TMUX_OPTS new-session -s $session -d
|
|
else
|
|
tmux $TMUX_OPTS attach -t $session
|
|
exit 0
|
|
fi
|
|
|
|
while read window pane command; do
|
|
|
|
[ -z "$window" -o -z "$pane" -o -z "$command" ] && continue
|
|
|
|
pane_number=${pane//[^0-9]*}
|
|
active=${pane//[^*]}
|
|
|
|
if [[ -n $active ]]; then
|
|
active_window=$window
|
|
active_pane=$pane_number
|
|
fi
|
|
|
|
if [[ -z $(tmux list-windows -t $session -F "#{window_name}" | grep "^${window}$") ]]; then
|
|
tmux new-window -a -t $session -n $window -c $PWD
|
|
fi
|
|
|
|
if [[ -z $(tmux list-panes -t $session:$window -F "#{pane_index}" | grep "^${pane_number}$") ]]; then
|
|
tmux split-window -t $session:$window
|
|
fi
|
|
|
|
tmux select-layout -t $session:$window tiled > /dev/null
|
|
|
|
tmux send-keys -t $session:$window.$pane_number "$command" C-m
|
|
done < $layout
|
|
|
|
# The first window is never used. The specified window names in the layout create new windows.
|
|
# Closing the first window will not renumber the existing ones. To fix that, add the following option in ~/.tmux.conf
|
|
#
|
|
# set-option -g renumber-windows on
|
|
#
|
|
|
|
tmux kill-window -t $session:$( tmux list-windows -t $session -F "#{window_index}" | head -n 1 )
|
|
|
|
tmux select-window -t $session:$active_window
|
|
|
|
tmux select-pane -t $session:$active_window.$active_pane
|
|
|
|
tmux $TMUX_OPTS attach-session -t $session
|