tmux-stare/scripts/_rename_hook.sh (view raw)
Oleksandr Smirnov
Oleksandr Smirnov
olexsmir@gmail.com add rename hook for native tmux session renames, 1 month ago
olexsmir@gmail.com add rename hook for native tmux session renames, 1 month ago
| 1 | #!/usr/bin/env bash |
| 2 | CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| 3 | source "$CURRENT_DIR/helpers.sh" |
| 4 | |
| 5 | main() { |
| 6 | local session_id="$1" |
| 7 | local new_name="$2" |
| 8 | local dir="$(get_opt_dir)" |
| 9 | local map_file="${dir}/.session_map" |
| 10 | |
| 11 | [[ -z "$session_id" || -z "$new_name" ]] && exit 0 |
| 12 | |
| 13 | local old_name="" |
| 14 | if [[ -f "$map_file" ]]; then |
| 15 | old_name=$(awk -F'\t' -v id="$session_id" '$1 == id {print $2; exit}' "$map_file") |
| 16 | fi |
| 17 | |
| 18 | [[ -z "$old_name" || "$old_name" == "$new_name" ]] && exit 0 |
| 19 | [[ -e "${dir}/${new_name}_last" ]] && exit 0 |
| 20 | |
| 21 | local old_last="${dir}/${old_name}_last" |
| 22 | if [[ -L "$old_last" ]]; then |
| 23 | local actual="$(readlink "$old_last")" |
| 24 | local actual_basename="$(basename "$actual")" |
| 25 | local timestamp="${actual_basename: -15}" |
| 26 | local new_actual="${dir}/${new_name}_${timestamp}" |
| 27 | mv "$actual" "$new_actual" |
| 28 | ln -sf "$new_actual" "${dir}/${new_name}_last" |
| 29 | rm "$old_last" |
| 30 | fi |
| 31 | |
| 32 | update_session_map |
| 33 | } |
| 34 | main "$@" |