#!/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 '#{?#{m:*ssh,#{socket_path}},#S,#{host}}' 2>/dev/null) HOST=$(tmux display -p '#h' 2>/dev/null) set -- "$( tac "$TMUX_SSH_HISTFILE" | sed "/^${ATTACHED}\$/d" | fzf-tmux -p20%,20% -- --print-query -d/ --with-nth -1 | tail -1 )" fi if [ -z "$1" ]; then exit 0 fi target="$1" if [ "$target" = "$HOST" ]; then tmux detach -E 'tmux new -A' else 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 "$target" || exit 0 else 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"