summaryrefslogtreecommitdiffstatshomepage
path: root/tmux/.local/bin
diff options
context:
space:
mode:
authorToby Vincent <tobyv13@gmail.com>2023-03-16 19:52:55 -0500
committerToby Vincent <tobyv13@gmail.com>2023-03-16 19:52:55 -0500
commita47a974c4227865340af4910b7b211f6f63495b5 (patch)
tree168e11b3b48aacb8feb9f8dc76b72cf536e9d48b /tmux/.local/bin
parent4ec95d1aa6e06017c02c13ee4a0a1bde1713886b (diff)
feat(tmux): add MRU history file to tmux-ssh
Diffstat (limited to 'tmux/.local/bin')
-rwxr-xr-xtmux/.local/bin/tmux-ssh42
1 files changed, 25 insertions, 17 deletions
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"