Xterm.js: Плавная прокрутка

Созданный на 11 дек. 2017  ·  16Комментарии  ·  Источник: xtermjs/xterm.js

Как человеку, который плохо знаком с интерфейсом командной строки, я считаю, что когнитивно сложнее просматривать построчную прокрутку, используемую в терминалах, в отличие от плавной прокрутки в большинстве других приложений. Я узнал, что это потому, что в терминале наименьшей единицей отображения является символ, а не пиксель.

Возможно ли (и желательно), чтобы xterm.js обошел это и включил опцию плавной прокрутки на основе пикселей?

Первоначально я попросил @albinekb сделать то же самое для Hyper (https://github.com/zeit/hyper), и он направил меня в этот проект, поскольку Hyper использует xterm.js.

aremouse-support typenhancement

Самый полезный комментарий

то, что так мало людей использовали бы

Все, кто прокручивает тачпадом, используют его в VTE, нравится им это или нет: D

Все 16 Комментарий

Это, конечно, возможно, но это потребует довольно много работы (+ дополнительная сложность) для того, что так мало людей будет использовать. Я бы предпочел не добавлять это лично.

Это понятно и честно. Спасибо за вашу работу!

К вашему сведению: VTE (терминал GNOME и его друзья) делает это, начиная с версии 0.44. (Конечно, это работает только в режиме обратной прокрутки эмулятора терминала, а не, например, при прокрутке файла в текстовом редакторе.)

то, что так мало людей использовали бы

Все, кто прокручивает тачпадом, используют его в VTE, нравится им это или нет: D

@egmontkob У меня здесь есть терминал gnome 3.18.3, и он, похоже, не работает, в разделе прокрутки в настройках профиля также нет настройки?

screen shot 2017-12-18 at 6 57 19 am

gt 3.18.3, скорее всего, означает, что у вас vte 0.42, тогда как эта функция появилась в версии 0.44.

Нет новых настроек (есть ожидающий запрос с

Кто-то уже выразил свое недовольство тем, что это не настраивается в VTE. Конечно, это полностью ваш выбор, реализуете ли вы эту функцию вообще в xtermjs, и если да, то сделаете ли вы ее настраиваемой.

Я думаю, что для вас может быть важным моментом в том, что эта функция присутствует в VTE уже более 1,5 лет и «принудительно» для всех пользователей VTE, которые используют трекпад (а не колесо мыши, которое отправляет «единицы» прокрутки для которых мы все еще прокручиваем целые строки), и за это время я услышал всего 2 или, может быть, 3 жалобы, чтобы вернуть прежнее поведение. Если бы эта функция была отстойной, жалоб было бы намного больше.


У меня нет цифр или соотношений использования VTE, наиболее близкими из имеющихся у меня являются результаты этого опроса (обратите внимание, что дата статьи искажена, на основе отметок времени в комментариях, это голосование двухлетней давности), что предполагает, что VTE рыночная доля эмуляторов терминала Linux составляет примерно 50%, то есть довольно большая. Многие люди уже используют плавную прокрутку.


Я новичок в xtermjs и друзьях, и я еще не пробовал, просто посмотрите, что здесь происходит круто. Я не уверен, что у меня в голове правильная архитектура, но если я это сделаю, то терминал GNOME для VTE - это то же самое, что hterm для xtermjs. VTE - это виджет GTK +, выполняющий эмуляцию терминала. Существует около десятка более или менее популярных приложений-эмуляторов терминала, использующих VTE, в том числе GNOME Terminal, Xfce4 Terminal, Terminator, Tilix ...


В случае, если вы хотите опробовать поведение, самый простой способ (для этого, а также для любых функций VTE, которые не требуют сотрудничества с терминалом GNOME) - это скомпилировать только VTE и запустить его тестовое приложение:

  • Получить из git или tarball
  • ./autogen.sh (git) или ./configure (tarball)
  • make
  • ./src/app/vte-2.91 (от 0,51) или ./src/testvte (до 0,50) или ./bindings/vala/vte-2.91 или ./src/vte-2.91 (до 0,50, в какой-то момент был перемещен в другой каталог)

Я использовал колесико мыши, вот и моя проблема: sweat_smile:

В первом посте я забыл упомянуть ту довольно важную деталь, что я действительно использую трекпад. Не обращая внимания на пользователей трекпада или пользователей других методов сенсорного ввода, я понимаю, что немногие люди предпочитают прокрутку на основе пикселей.

ИМО, можно с уверенностью сказать, что на данный момент пользователи этого просто ожидают. То есть даже у hterm есть.

На самом деле это невозможно с рендерером холста, однако это будет довольно легко сделать с рендерером webgl https://github.com/xtermjs/xterm.js/pull/1790, который должен заменить рендерер холста. Для средства визуализации DOM мы можем добиться этого, имея частично видимые линии сверху и снизу. Таким образом, я считаю, что это заблокировано на # 1790.

Еще кое-что, что следует учитывать: если ydisp не является целым числом, а количество строк превышает Terminal.rows visible нарушает некоторые предположения, сделанные в коде, например, как это влияет на поддержку программы чтения с экрана?

Это невозможно с рендерером холста

Почему нет? Это должно быть так же просто, как рисование viewportHeight + 2 количества строк и смещение где-то между первой и второй строкой на основе пиксельного смещения текущей позиции прокрутки.

Это, конечно, возможно, но это потребует довольно много работы (+ дополнительная сложность) для того, что так мало людей будет использовать. Я бы предпочел не добавлять это лично.

Fwiw я собирался запросить ту же функцию. Я лично считаю, что это важный шаг к повышению удобства использования. Тот факт, что он не получил более широкой поддержки, можно объяснить тем фактом, что это относительно новая идея, и что мы, программисты, просто привыкаем к ограничениям, с которыми нам приходится работать.

Почему нет?

@sdegutis да, это возможно, тогда я думал, что средство визуализации холста будет сильно оптимизировано за счет использования специальной логики, чтобы делать недействительными только те разделы контента, которые в этом нуждались. Прокрутка терминала сейчас с помощью средства рендеринга холста в любом случае повторно отрендерит все строки, плюс, даже если это значение по умолчанию, план в любом случае заключается в постепенном отказе от средства рендеринга холста.

Это должно быть довольно легко сделать, просто это нужно сделать для 3-х рендереров, и, в частности, для webgl потребуются некоторые специальные настройки (увеличение размера буфера атрибутов, поскольку нарисовано больше ячеек, чем строк * столбцов).

Мне также понравилась эта функция, моя проблема на самом деле не просто эстетика, это проблема удобства использования. Проблема в том, что одно действие вызывает слишком много пропусков на терминале, а тот факт, что нет плавной прокрутки, делает почти невозможным понять, какие строки были пропущены. Это действительно затрудняет использование терминала.

Каждый раз, когда я прокручиваю терминал в Visual Studio Code, я не могу понять, где был. Плавная прокрутка - это базовая функция, и она нам нужна.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

circuitry2 picture circuitry2  ·  4Комментарии

parisk picture parisk  ·  3Комментарии

fabiospampinato picture fabiospampinato  ·  4Комментарии

johnpoth picture johnpoth  ·  3Комментарии

Mlocik97-issues picture Mlocik97-issues  ·  3Комментарии