← 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