In the previous post I showed a script that creates a Tmux session for a particular directory and attaches to it. More often, however, I launch new Tmux sessions from within Tmux, especially for Git worktrees that branch from the current repository. This script does most of the work:
directory=$1
session=$2
branch=$3
if [[ ! -d $directory ]]; then
if git rev-parse --quiet --verify $branch > /dev/null; then
git worktree add $directory $branch
else
git worktree add --checkout -b $branch $directory
fi
fi
tmux new-session -d -c $directory -s "$session"
tmux send -t "$session" "cd $directory" C-m
tmux send -t "$session" "vim" C-m
tmux new-window -t "$session" -c $directory
tmux switch-client -t "$session:1"
If the directory doesn't exist, the script creates a new worktree. The exact worktree add
subcommand depends on whether the branch already exists or needs to be created. Once it creates the directory, it creates a new Tmux session, configures it, and switches to it. I call the script workspace
.
I don't invoke workspace
directly. Instead it's called from a couple of wrapper scripts. One takes a branch name and generates from it the directory and session names that are then passed to workspace
. The other wrapper script takes a directory name and only generates a session name (a branch name isn't needed since the existing worktree is already checked out to a branch).