119 lines
3.0 KiB
Bash
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
|