fix: resize через TIOCSWINSZ ioctl на TTY вместо kill -WINCH
SIGWINCH напрямую игнорируется. TIOCSWINSZ на TTY claude посылает SIGWINCH через kernel к foreground process group. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user