From a47a974c4227865340af4910b7b211f6f63495b5 Mon Sep 17 00:00:00 2001 From: Toby Vincent Date: Thu, 16 Mar 2023 19:52:55 -0500 Subject: feat(tmux): add MRU history file to tmux-ssh --- tmux/.local/bin/tmux-ssh | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) (limited to 'tmux/.local') diff --git a/tmux/.local/bin/tmux-ssh b/tmux/.local/bin/tmux-ssh index 0ba0c69..610b8bb 100755 --- a/tmux/.local/bin/tmux-ssh +++ b/tmux/.local/bin/tmux-ssh @@ -1,20 +1,19 @@ #!/bin/sh +TMUX_SSH_HISTFILE="$XDG_STATE_HOME/tmux_ssh_history" + +write_hist() { + sed -i -e "/^$1\$/d" -e "\$a$1" "$TMUX_SSH_HISTFILE" || + echo "$1" >"$TMUX_SSH_HISTFILE" +} + if [ "$#" -eq 0 ]; then - ATTACHED=$(tmux display -p '#S' 2>/dev/null) - HOST=$(tmux display -p '#{host}' 2>/dev/null) + ATTACHED=$(tmux display -p '#{?#{m:*ssh,#{socket_path}},#S,#{host}}' 2>/dev/null) + HOST=$(tmux display -p '#h' 2>/dev/null) set -- "$( - ( - tmux display -p '#{?#{m:*ssh,#{socket_path}},localhost,}' 2>/dev/null - grep -P '^[Hh]ost ([^*]+)$' "$HOME/.ssh/config" | grep -Po ' \K(\w+)' | sed "\|^$HOST\$|d" | - sed "\|^${ATTACHED}\$|d" | - sort -u | - timestamp.sh --type="ssh" --format="{}:{1}" | - sort -r | - cut -d':' -f2 - ) | - sed '\|^$|d' | + tac "$TMUX_SSH_HISTFILE" | + sed "/^${ATTACHED}\$/d" | fzf-tmux -p20%,20% -- --print-query -d/ --with-nth -1 | tail -1 )" @@ -24,16 +23,25 @@ if [ -z "$1" ]; then exit 0 fi -if [ "$1" = "localhost" ] || [ "$1" = "$HOST" ]; then +target="$1" + +if [ "$target" = "$HOST" ]; then tmux detach -E 'tmux new -A' else - if ! tmux -L ssh has-session -t "$1"; then - tmux -L ssh new-session -ds "$1" ssh -t "$1" "zsh -l -c 'tmux new -A'" + if ! tmux -L ssh has-session -t "$target"; then + ssh localhost -- : + tmux -L ssh new-session -ds "$target" ssh -t "$target" "zsh -l -c 'tmux new -A'" fi if [ -z "$TMUX" ]; then - tmux -L ssh attach -t "$1" + tmux -L ssh attach -t "$target" || exit 0 else - tmux detach -E "tmux -L ssh attach -t $1" + tmux detach -E "tmux -L ssh attach -t $target" || exit 0 fi fi + +if [ "$ATTACHED" = "$HOST" ] && ! grep -q "$HOST" "$TMUX_SSH_HISTFILE"; then + write_hist "$HOST" +fi + +write_hist "$target" -- cgit v1.2.3-70-g09d2