← back to Terminal Status

verification/install/before/.claude/skills/tab-ticket/scripts/tab-ticket-set.sh

61 lines

#!/usr/bin/env bash
# tab-ticket-set.sh TK-####  — declare THIS window's ticket.
# Resolves the caller's own controlling ttysNNN (walking process ancestry, same
# as color.sh) and writes the TK id to ~/.claude/tab-tickets/<ttyname>.txt so
# tab-ticket-title.sh will render "TK-#### · up Xh Ym" on this window's title.
#
# Usage:  tab-ticket-set.sh TK-10921        # set this window's ticket
#         tab-ticket-set.sh clear|none      # clear it (back to no-TK)
#         tab-ticket-set.sh --apply TK-1234 # set AND immediately repaint titles
set -u

TICKET_DIR="${HOME}/.claude/tab-tickets"
mkdir -p "$TICKET_DIR"
SELF_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

APPLY=0
if [[ "${1:-}" == "--apply" ]]; then APPLY=1; shift; fi

TK="${1:-}"
if [[ -z "$TK" ]]; then
  echo "usage: tab-ticket-set.sh [--apply] TK-#### | clear"
  exit 2
fi

# resolve caller's own controlling ttys* by walking ancestry from $$
tty_path=""; ttyname=""; p=$$
for _ in 1 2 3 4 5 6 7 8 9 10 11 12; do
  line="$(ps -o ppid=,tty= -p "$p" 2>/dev/null)" || break
  # shellcheck disable=SC2086
  set -- $line; pp="${1:-}"; tt="${2:-}"
  [[ -z "$pp" ]] && break
  if [[ "$tt" == ttys* ]]; then ttyname="$tt"; tty_path="/dev/$tt"; break; fi
  p="$pp"
done

if [[ -z "$ttyname" ]]; then
  echo "tab-ticket-set → could not resolve my own tty; ticket not set"
  exit 1
fi

tkfile="$TICKET_DIR/${ttyname}.txt"

case "$TK" in
  clear|none|CLEAR|NONE)
    rm -f "$tkfile"
    echo "tab-ticket-set → cleared ticket for ${ttyname} (now no-TK)"
    ;;
  *)
    # normalise: accept "10921" or "tk-10921" → "TK-10921"; else store verbatim
    norm="$TK"
    if [[ "$TK" =~ ^[0-9]+$ ]]; then norm="TK-$TK"; fi
    norm="$(printf '%s' "$norm" | sed -E 's/^tk-/TK-/I')"
    printf '%s\n' "$norm" > "$tkfile"
    echo "tab-ticket-set → ${ttyname} now working ${norm}"
    ;;
esac

if (( APPLY )); then
  bash "$SELF_DIR/tab-ticket-title.sh" >/dev/null 2>&1 || true
fi