From 28ead6994d7dcdec8fa8db24deeccfe8c9d92ac5 Mon Sep 17 00:00:00 2001 From: Ivan Malison Date: Thu, 22 Jan 2026 00:57:59 -0800 Subject: [PATCH] Fix tmux auto-naming for duplicate directory basenames - Handle duplicate session names by appending -2, -3, etc. - Add tn function to manually rename current session to cwd basename Co-Authored-By: Claude Opus 4.5 --- dotfiles/lib/functions/tn | 31 +++++++++++++++++++++++++++++++ dotfiles/tmux.conf | 27 +++++++++++++++++++++++++-- 2 files changed, 56 insertions(+), 2 deletions(-) create mode 100755 dotfiles/lib/functions/tn diff --git a/dotfiles/lib/functions/tn b/dotfiles/lib/functions/tn new file mode 100755 index 00000000..a406906d --- /dev/null +++ b/dotfiles/lib/functions/tn @@ -0,0 +1,31 @@ +#!/usr/bin/env sh + +function tn { + if [ -z "$TMUX" ]; then + echo "Not in a tmux session" + return 1 + fi + + base=$(basename "$PWD") + current=$(tmux display-message -p '#{session_name}') + + # Don't rename if already named correctly + if [ "$current" = "$base" ]; then + echo "Session already named '$base'" + return 0 + fi + + if tmux has-session -t "$base" 2>/dev/null; then + i=2 + while tmux has-session -t "${base}-${i}" 2>/dev/null; do + i=$((i+1)) + done + tmux rename-session "${base}-${i}" + echo "Renamed session to '${base}-${i}'" + else + tmux rename-session "$base" + echo "Renamed session to '$base'" + fi +} + +tn "$@" diff --git a/dotfiles/tmux.conf b/dotfiles/tmux.conf index f83ac693..f91f4353 100644 --- a/dotfiles/tmux.conf +++ b/dotfiles/tmux.conf @@ -1,5 +1,28 @@ # Automatically rename new sessions to the basename of the current directory -set-hook -g session-created 'run-shell "tmux rename-session -t #{session_name} $(basename #{pane_current_path})"' +# Handles duplicates by appending -2, -3, etc. +set-hook -g session-created 'run-shell " + base=$(basename \"#{pane_current_path}\") + if tmux has-session -t \"$base\" 2>/dev/null; then + i=2 + while tmux has-session -t \"${base}-${i}\" 2>/dev/null; do + i=$((i+1)) + done + tmux rename-session -t \"#{session_name}\" \"${base}-${i}\" + else + tmux rename-session -t \"#{session_name}\" \"$base\" + fi +"' # Also rename when attaching to a session (optional) -set-hook -g client-session-changed 'run-shell "tmux rename-session -t #{session_name} $(basename #{pane_current_path})"' \ No newline at end of file +set-hook -g client-session-changed 'run-shell " + base=$(basename \"#{pane_current_path}\") + if tmux has-session -t \"$base\" 2>/dev/null; then + i=2 + while tmux has-session -t \"${base}-${i}\" 2>/dev/null; do + i=$((i+1)) + done + tmux rename-session -t \"#{session_name}\" \"${base}-${i}\" + else + tmux rename-session -t \"#{session_name}\" \"$base\" + fi +"'