diff --git a/local/bin/t b/local/bin/t index 8be06b7..a7a7294 100755 --- a/local/bin/t +++ b/local/bin/t @@ -4,6 +4,7 @@ # https://github.com/jessarcher/dotfiles/blob/master/scripts/t # # Tweaks by Ismo Vuorinen 2025 +# vim: ft=bash ts=2 sw=2 et # Set environment variables for configuration with defaults T_ROOT="${T_ROOT:-$HOME/Code}" @@ -16,30 +17,73 @@ error_exit() exit 1 } +get_directories() +{ + local dirs='' + dirs+='# Directories\n' + dirs+=$(find "$T_ROOT" -maxdepth 2 -mindepth 1 -type d ! -name '.git' ! -name '.svn') + dirs+="$(printf "\n%s" "$DOTFILES")" + + echo "$dirs" +} + +check_tmux() +{ + if ! command -v tmux &> /dev/null; then + error_exit "tmux is not installed." + fi + + # check to see that tmux server is running + if ! tmux info &> /dev/null; then + tmux start-server + fi +} + +get_sessions() +{ + check_tmux + + local sessions='' + sessions+='# Sessions\n' + sessions+=$(tmux list-sessions -F "#{session_name}" 2> /dev/null) + + echo "$sessions" +} + +items='' + # Select the directory if [[ $# -eq 1 ]]; then selected="$1" else - items=$(find "$T_ROOT" -maxdepth 2 -mindepth 1 -type d) - items+="$(printf "\n%s" "$DOTFILES")" - items+="$(printf "\n/tmp")" + items+=$(get_sessions) + items+='\n' + items+=$(get_directories) + selected=$(echo -e "$items" | fzf) || exit 0 # Exit if no selection is made fi +# If user selected a header, exit +[[ ${selected:0:1} == "#" ]] && error_exit "You selected a header, why?" + # Exit if no directory was selected [[ -z $selected ]] && error_exit "No directory selected." # Sanitize the session name -dirname=$(basename "$selected" | tr '.' '_') +session_name=$(basename "$selected") +# If we get nothing, we are dealing with a session +[[ $session_name == "" ]] && session_name="$selected" +# Remove dots from the session name as tmux doesn't like them +session_name="${session_name//./}" # Try to switch to the tmux session -if tmux switch-client -t "=$dirname" 2> /dev/null; then +if tmux switch-client -t "=$session_name" 2> /dev/null; then exit 0 fi # Create a new tmux session or attach to an existing one -if tmux new-session -c "$selected" -d -s "$dirname" 2> /dev/null; then - tmux switch-client -t "$dirname" +if tmux new-session -c "$selected" -d -s "$session_name" 2> /dev/null; then + tmux switch-client -t "$session_name" else - tmux new -c "$selected" -A -s "$dirname" + tmux new -c "$selected" -A -s "$session_name" fi