Files
chezmoi/dot_zsh/tmux.zsh
T
2026-09-17 13:20:08 +02:00

119 lines
3.0 KiB
Bash

if [[ -n "$TMUX" ]]; then
autoload -Uz add-zsh-hook
# -------------------------------------------------------------------------
# Basisname des Windows aus aktuellem Verzeichnis
# -------------------------------------------------------------------------
_tmux_set_base_window_name() {
local name
if [[ "$PWD" == "$HOME" ]]; then
name="sebastian"
else
name="${PWD:t}"
fi
# Basisnamen separat merken
tmux set-option \
-w \
-t "$TMUX_PANE" \
@base_window_name "$name" \
2>/dev/null
_tmux_update_window_name
}
# -------------------------------------------------------------------------
# Window-Name aus Basisname + allen SSH-Sessions dieses Windows bauen
#
# Beispiel:
# projects 🔐 P1→labgw P4→prod
# -------------------------------------------------------------------------
_tmux_update_window_name() {
local base ssh_info line
base="$(
tmux show-options \
-w \
-v \
-t "$TMUX_PANE" \
@base_window_name \
2>/dev/null
)"
[[ -z "$base" ]] && base="${PWD:t}"
ssh_info=""
while IFS= read -r line; do
[[ -z "$line" ]] && continue
if [[ -n "$ssh_info" ]]; then
ssh_info+=" "
fi
ssh_info+="$line"
done < <(
tmux list-panes \
-t "$TMUX_PANE" \
-F '#{?@ssh_host,P#{pane_index}→#{@ssh_host},}' \
2>/dev/null
)
if [[ -n "$ssh_info" ]]; then
tmux rename-window \
-t "$TMUX_PANE" \
"${base} 🔐 ${ssh_info}" \
2>/dev/null
else
tmux rename-window \
-t "$TMUX_PANE" \
"$base" \
2>/dev/null
fi
}
add-zsh-hook chpwd _tmux_set_base_window_name
_tmux_set_base_window_name
# -------------------------------------------------------------------------
# SSH wrapper
# -------------------------------------------------------------------------
ssh() {
local host rc
# Bewusst SSH-Alias nehmen:
# ssh labgw
# zeigt "labgw", nicht die dahinterliegende IP.
host="$(
command ssh -G "$@" 2>/dev/null |
awk '$1 == "host" { print $2; exit }'
)"
if [[ -n "$host" ]]; then
tmux set-option \
-p \
-t "$TMUX_PANE" \
@ssh_host "$host" \
2>/dev/null
_tmux_update_window_name
fi
command ssh "$@"
rc=$?
# SSH-Markierung dieses Panes entfernen
tmux set-option \
-p \
-u \
-t "$TMUX_PANE" \
@ssh_host \
2>/dev/null
_tmux_update_window_name
return $rc
}
fi