From 986abf51016382b4c76a34bb0ba37b33449784c9 Mon Sep 17 00:00:00 2001 From: vitaly Date: Tue, 9 Jun 2026 21:20:35 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20resize=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7?= =?UTF-8?q?=20TIOCSWINSZ=20ioctl=20=D0=BD=D0=B0=20TTY=20=D0=B2=D0=BC=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=BE=20kill=20-WINCH?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SIGWINCH напрямую игнорируется. TIOCSWINSZ на TTY claude посылает SIGWINCH через kernel к foreground process group. Co-Authored-By: Claude Sonnet 4.6 --- .../claude/hooks/switch-account-hook.sh | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/home-configs/claude/hooks/switch-account-hook.sh b/home-configs/claude/hooks/switch-account-hook.sh index a43e2c1..568b344 100755 --- a/home-configs/claude/hooks/switch-account-hook.sh +++ b/home-configs/claude/hooks/switch-account-hook.sh @@ -40,9 +40,22 @@ echo "$next" > "$CURRENT_FILE" echo "Аккаунт: ${current:-?} -> ${next} (всего: ${#accounts[@]})" >&2 -# Посылаем SIGWINCH процессу claude с задержкой в фоне (после отрисовки блокировки) +# Тригерим resize через TIOCSWINSZ на TTY claude (надёжнее чем kill -WINCH) sh_pid=$PPID claude_pid=$(awk '/PPid/{print $2}' /proc/$sh_pid/status 2>/dev/null) -[ -n "$claude_pid" ] && ( sleep 0.3 && kill -WINCH "$claude_pid" 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 +" ) & + fi +fi exit 2