Files
dotfiles/claude/.claude/statusline-command.sh
T
ddadmin fd56702644 feat(claude): добавлен скрипт statusline-command.sh для строки статуса
- Зачем:
  - отображать в Claude Code текущий путь, ветку, модель и использование контекста/rate limits.
- Что:
  - создан claude/.claude/statusline-command.sh с парсингом JSON и ANSI-форматированием.
  - обновлён .gitignore для трекинга нового скрипта.
- Проверка:
  - запуск скрипта в рабочей директории проекта: bash claude/.claude/statusline-command.sh.
2026-04-26 22:39:21 +03:00

88 lines
2.1 KiB
Bash

#!/usr/bin/env bash
# Читаем и парсим JSON одним вызовом jq
IFS=$'\t' read -r cwd display_name ctx_pct rate5h rate7d < <(jq -r '[
(.workspace.current_dir // ""),
(.model.display_name // ""),
(.context_window.used_percentage // ""),
(.rate_limits.five_hour.used_percentage // ""),
(.rate_limits.seven_day.used_percentage // "")
] | @tsv')
# Путь: $HOME → ~, длинные пути → .../<last_dir>
path="$cwd"
home="$HOME"
if [[ "$path" == "$home" ]]; then
path="~"
elif [[ "$path" == "$home"/* ]]; then
path="~${path#$home}"
fi
# Считаем сегменты (кроме ведущего ~)
IFS='/' read -ra segs <<< "${path#\~}"
segs=("${segs[@]/#/}") # убираем пустые
real_segs=()
for s in "${segs[@]}"; do [[ -n "$s" ]] && real_segs+=("$s"); done
if (( ${#real_segs[@]} > 2 )); then
last="${real_segs[-1]}"
if [[ "$path" == ~* ]]; then
path="~/.../$last"
else
path=".../$last"
fi
fi
# Git branch
branch=""
if [[ -n "$cwd" ]]; then
branch=$(git -C "$cwd" rev-parse --abbrev-ref HEAD 2>/dev/null)
fi
# Модель: убрать префикс "Claude "
model="${display_name#Claude }"
# ANSI цвета
GREEN='\033[32m'
YELLOW='\033[33m'
PURPLE='\033[35m'
CYAN='\033[36m'
RESET='\033[0m'
# user@hostname
user_host="${GREEN}${USER}@$(hostname -s)${RESET}"
# путь
colored_path="${YELLOW}${path}${RESET}"
# ветка
colored_branch=""
if [[ -n "$branch" ]]; then
colored_branch=" ${PURPLE}(${branch})${RESET}"
fi
# модель
colored_model="${CYAN}${model}${RESET}"
# Собираем секции
out="${user_host}:${colored_path}${colored_branch} | ${colored_model}"
# ctx: только если не пустое и не null
if [[ -n "$ctx_pct" && "$ctx_pct" != "null" ]]; then
out+=" ctx:${ctx_pct}%"
fi
# rate limits: только если не пустые и не null
rates=""
if [[ -n "$rate5h" && "$rate5h" != "null" ]]; then
rates+=" 5h:${rate5h}%"
fi
if [[ -n "$rate7d" && "$rate7d" != "null" ]]; then
rates+=" 7d:${rate7d}%"
fi
if [[ -n "$rates" ]]; then
out+=" |${rates}"
fi
printf '%b\n' "$out"