Антропики
показали свой новый режим
NO_FLICKER для Claude Code в терминале.
Он использует новый экспериментальный рендерер. Рендерер пока на ранней стадии и имеет компромиссы, но уже сейчас большинство внутренних пользователей предпочитают его старому. Также он поддерживает события мыши (да, прямо в терминале).
Попробовать:
CLAUDE_CODE_NO_FLICKER=1 claudeНекоторые плюсы:
- Больше нет мерцания (flickering)
- Больше нет «прыжков» интерфейса
- Постоянное потребление памяти и CPU по мере роста диалога
- Поддержка мыши. Теперь можно кликать, чтобы перемещать курсор внутри input-поля. Некоторые элементы UI тоже стали кликабельными
- Более аккуратное поведение выделения. Например, при выделении кода мы больше не включаем номера строк и элементы UI
Есть и минусы:
- Нативный
cmd-f не работает. Вместо этого нажмите
ctrl+o, затем
/, чтобы искать по транскрипту (или используйте
ctrl-r для реверс поиска)
- Нативный копипаст не работает. Вместо этого при выделении текст по умолчанию копируется в буфер обмена. Это можно изменить в
settings.json, чтобы использовать
ctrl+c, если так удобнее
- «Физика» скролла отличается на разных устройствах, и это всё ещё настраивают, чтобы она ощущалась одинаково хорошо в разных терминалах
При разработке под терминал возникает много компромиссов. В отличие от веба, мобильных и десктопных приложений, у терминала довольно ограниченный набор инструкций для рендеринга — ANSI escape-коды.
Есть ANSI-код для «переместить курсор в (x, y)», другой — для «вывести 'foo'» и т.д. Это немного похоже на программирование на уровне Assembly.
Поскольку не существует ANSI-кода для «переместить курсор в (x, -y)», чтобы перерисовать строку вне текущего viewport, приходится использовать команду «очистить весь экран» — отсюда и мерцание.
Их новый экспериментальный рендерер
NO_FLICKER решает это за счёт виртуализации всего viewport.
Они перехватывают события клавиатуры и мыши, чтобы реализовать скроллинг, и виртуализируют viewport, перенося контроль над тем, что рендерится, на уровень приложения.
У этого подхода есть компромиссы, но на практике он ощущается неожиданно хорошо. Это способ работать в рамках ограничений терминального рендеринга, при этом давая более богатый и производительный пользовательский опыт.