From 08f23e857e8827187befba545df6826685e60c93 Mon Sep 17 00:00:00 2001 From: vitaly Date: Tue, 9 Jun 2026 21:22:36 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BF=D1=80=D1=8F=D0=BC=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D1=80=D0=B8=D1=81=D0=BE=D0=B2=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81=D0=BD=D0=BE=D0=B9?= =?UTF-8?q?=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B8=20=D1=87=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B7=20TTY=20escape-=D0=BA=D0=BE=D0=B4=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SIGWINCH и TIOCSWINSZ не заставляют Claude Code обновить статусную строку. Запускаем statusline-command.sh с кешем и пишем результат напрямую в TTY claude через \0337 (save cursor) / \033[999B / \033[2K / \0338. Co-Authored-By: Claude Sonnet 4.6 --- .../claude/hooks/switch-account-hook.sh | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) 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