77 lines
1.9 KiB
Bash
77 lines
1.9 KiB
Bash
#!/bin/bash
|
|
|
|
not_in_tmux() {
|
|
[ -z "$TMUX" ]
|
|
}
|
|
|
|
DIR="$1"
|
|
|
|
# If no arguments are passed in, try to immediately attach or start without further input
|
|
echo "$DIR"
|
|
if [ -z "$DIR" ]; then
|
|
if not_in_tmux; then
|
|
tmux attach && exit 1 || DIR="--start"
|
|
else
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# If --start was passed in, immediately start a new session based on the current directory
|
|
if [ "$DIR" = "--start" ]; then
|
|
echo "Starting"
|
|
path_name="$(basename "$PWD" | tr . -)"
|
|
session_name="${path_name//./_}"
|
|
else
|
|
# Ask the user which directory to start in
|
|
_session_name=$(cd "$DIR" && find -L . -maxdepth 1 -type d -printf "%f\n" | sed "s|/||g" | fzf --reverse --header="Select project from $(basename "$DIR") >")
|
|
session_name="${_session_name//./_}"
|
|
path_name="$DIR/$_session_name"
|
|
fi
|
|
|
|
echo "Session name is \"$session_name\""
|
|
echo "Path name is \"$path_name\""
|
|
|
|
if [ -z "$session_name" ]; then
|
|
# Operation cancelled by user
|
|
exit 1
|
|
fi
|
|
|
|
session_exists() {
|
|
# Check if the $session_name exists
|
|
tmux has-session -t "=$session_name"
|
|
}
|
|
|
|
create_detached_session() {
|
|
if [ "$DIR" = "--start" ]; then
|
|
(TMUX=''
|
|
tmux new-session -Ad -s "$session_name" -c "$path_name"
|
|
)
|
|
else
|
|
(TMUX=''
|
|
tmux new-session -Ad -s "$session_name" -c "$path_name"
|
|
tmux split-window -vb -t "$session_name" -c "$path_name" -p 70
|
|
tmux send-keys -t "$session_name" "nvim '+Telescope find_files'" Enter
|
|
)
|
|
fi
|
|
}
|
|
|
|
create_if_needed_and_attach() {
|
|
if not_in_tmux; then
|
|
tmux new-session -As "$session_name" -c "$path_name"
|
|
else
|
|
if ! session_exists; then
|
|
create_detached_session
|
|
fi
|
|
tmux switch-client -t "$session_name"
|
|
fi
|
|
}
|
|
|
|
attach_to_first_session() {
|
|
first_session_name=$(tmux list-sessions -F "#{session_name}" | head -n 1)
|
|
if [ -n "$first_session_name" ]; then
|
|
tmux attach -t "$first_session_name"
|
|
tmux choose-tree -Za
|
|
fi
|
|
}
|
|
|
|
create_if_needed_and_attach || attach_to_first_session
|