diff --git a/home-configs/claude/hooks/switch-account-hook.sh b/home-configs/claude/hooks/switch-account-hook.sh index 568b344..dc4d832 100755 --- a/home-configs/claude/hooks/switch-account-hook.sh +++ b/home-configs/claude/hooks/switch-account-hook.sh @@ -40,21 +40,22 @@ echo "$next" > "$CURRENT_FILE" echo "Аккаунт: ${current:-?} -> ${next} (всего: ${#accounts[@]})" >&2 -# Тригерим resize через TIOCSWINSZ на TTY claude (надёжнее чем kill -WINCH) +# Обновляем статусную строку: перерисовываем последнюю строку напрямую в TTY sh_pid=$PPID claude_pid=$(awk '/PPid/{print $2}' /proc/$sh_pid/status 2>/dev/null) if [ -n "$claude_pid" ]; then tty_dev=$(ps -o tty= -p "$claude_pid" 2>/dev/null | tr -d ' ') if [ -n "$tty_dev" ] && [ "$tty_dev" != "?" ]; then - ( sleep 0.3 && python3 -c " -import fcntl, termios, struct, sys -try: - fd = open('/dev/$tty_dev', 'rb+', buffering=0) - ws = fcntl.ioctl(fd, termios.TIOCGWINSZ, bytes(8)) - fcntl.ioctl(fd, termios.TIOCSWINSZ, ws) - fd.close() -except: pass -" ) & + # Запускаем statusline-command.sh с кешированными данными и перерисовываем последнюю строку + cache_file=$(ls "$HOME/.cache/ai-setup/rate_limits_"*.cache 2>/dev/null | head -1) + model_id=$(basename "${cache_file}" .cache | sed 's/rate_limits_//') + ( sleep 0.2 + # Собираем данные из кеша для statusline + mock_json="{\"cwd\":\"$(echo "$input" | jq -r '.cwd // empty')\",\"model\":{\"display_name\":\"\",\"id\":\"$model_id\"},\"rate_limits\":{},\"context_window\":{}}" + new_line=$(echo "$mock_json" | bash "$HOME/.claude/statusline-command.sh" 2>/dev/null) + # Перерисовываем последнюю строку через escape-коды + printf '\0337\033[999B\033[2K%s\0338' "$new_line" > "/dev/$tty_dev" + ) & fi fi