1 files changed,
60 insertions(+),
0 deletions(-)
Author:
Oleksandr Smirnov
olexsmir@gmail.com
Committed at:
2026-02-09 02:08:41 +0200
Authored at:
2026-02-08 19:44:16 +0200
Change ID:
zprxwltvozvmtrwvsquoqsnnunorztmo
Parent:
fdac49f
A
scripts/pick.sh
··· 1 +#!/usr/bin/env bash 2 +CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 3 +source "$CURRENT_DIR/helpers.sh" 4 + 5 +get_all_sessions() { 6 + local current_session="$1" 7 + local save_dir="$(get_opt_dir)" 8 + local -A seen 9 + 10 + for file in "$save_dir"/*_last; do 11 + [[ -e "$file" ]] || continue 12 + local name="$(basename "${file%%_last}")" 13 + seen["$name"]="stored" 14 + done 15 + 16 + while IFS= read -r session; do 17 + seen["$session"]="loaded" 18 + done < <(tmux list-sessions -F "#{session_name}") 19 + 20 + for name in "${!seen[@]}"; do 21 + [[ "${seen[$name]}" == "loaded" ]] || continue 22 + if [[ "$name" == "$current_session" ]]; then 23 + printf "● %s (active)\n" "$name" 24 + else 25 + printf "● %s\n" "$name" 26 + fi 27 + done 28 + 29 + for name in "${!seen[@]}"; do 30 + [[ "${seen[$name]}" == "stored" ]] && printf "○ %s\n" "$name" 31 + done 32 +} 33 + 34 +pick() { 35 + local current_session="$(get_current_session_name)" 36 + local selected="$(get_all_sessions "$current_session" | fzf)" 37 + [[ -z "$selected" ]] && return 0 38 + 39 + local session_name 40 + session_name=${selected#● } 41 + session_name=${session_name#○ } 42 + session_name=${session_name% (active)} 43 + 44 + if tmux has-session -t "$session_name" 2>/dev/null; then 45 + tmux switch-client -t "$session_name" 46 + else 47 + exec "$CURRENT_DIR/restore.sh" "$session_name" 48 + fi 49 +} 50 + 51 +# TODO: unload session (save before killing) 52 +# TODO: remove unload session 53 +# TODO: rename session (rename old saves too to remove the duplicates) 54 +# TODO: create new session 55 +main() { 56 + case "${1:-}" in 57 + "") pick ;; 58 + esac 59 +} 60 +main