all repos

tmux-stare @ 173642cc8139fb60522afb185d58a586d7a2e79b

session manager, but my session manager
1 files changed, 60 insertions(+), 0 deletions(-)
picker
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