feat(claude): добавлен скрипт statusline-command.sh для строки статуса
- Зачем: - отображать в Claude Code текущий путь, ветку, модель и использование контекста/rate limits. - Что: - создан claude/.claude/statusline-command.sh с парсингом JSON и ANSI-форматированием. - обновлён .gitignore для трекинга нового скрипта. - Проверка: - запуск скрипта в рабочей директории проекта: bash claude/.claude/statusline-command.sh.
This commit is contained in:
1 parent
1a5ff7cecf
commit
fd56702644
2 files changed
+88
No files matched your search
@@ -3,3 +3,4 @@
|
|||||||
!skills
|
!skills
|
||||||
!.gitignore
|
!.gitignore
|
||||||
!settings.local.json
|
!settings.local.json
|
||||||
|
!statusline-command.sh
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
#!/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"
|
||||||
Reference in new issue
Block a user