major zsh cleanup
This commit is contained in:
1 parent
c9ab492c60
commit
a9ef0503c7
4 files changed
+335
-210
No files matched your search
@@ -0,0 +1,118 @@
|
||||
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
|
||||
Reference in new issue
Block a user