Как определить графические возможности окна терминала x11

Стандартная программа xterm имеет эмуляцию Tek4014 для простого вывода графики. Однако это не реализовано в большинстве (во всех?) преемниках, таких как rxvt, gnome-terminal или kterm.

Однако почти все терминалы X11 сообщают xterm как (часть) переменной среды TERM, что затрудняет для программы определение того, имеет ли базовый терминал графические возможности.

Можно ли узнать это программно? И есть ли современные терминальные окна (кроме xterm), которые реализуют графику Tek4014, может быть, в качестве надстройки?


person olebole    schedule 07.12.2017    source источник


Ответы (3)


На самом деле kterm обеспечивает эмуляцию Tek4014 в соответствии с его меню. Вероятно, вы имеете в виду консоль KDE, которая не работает. Сообщается, что TeraTerm (приложение для Windows) также поддерживает эту функцию.

Вернемся к сути: нет полезного метода, чтобы узнать, поддерживает ли данный терминал данную функцию. Некоторые терминалы возвращают информацию о состоянии, в которой указывается тип терминала и какие дополнительные функции он может иметь (на основе ответов устройства от DEC и аналогичных терминалов). Терминал Tektronix не имел такого запроса/ответа состояния (см. Управляющие последовательности XTerm).

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

Поскольку терминал ничего вам не скажет, единственный способ убедиться в этом — провести фактический осмотр. Кто-то может создать программу, которая может делать дампы экрана и проверять, что терминал отвечает на последовательности, но все еще есть ловушка, заключающаяся в том, что переключение между vt100 (или подобным) и tek4014 может не выполняться с той же управляющей последовательностью, которая используется в xterm. В конце концов, эта escape-последовательность не входит в стандартный репертуар любого аппаратного терминала.

person Thomas Dickey    schedule 07.12.2017

Если у вас есть доступ к дисплею X11, на котором работает терминал, вы можете сделать следующее. Выведите управляющую последовательность «войти в режим Tektronix» "\E[?38h" и дождитесь открытия нового окна. Свойство WM_CLIENT_LEADER, вероятно, должно быть идентификатором исходного окна терминала, а свойство WM_CLASS, вероятно, должно содержать «tektronix» (я проверял только с реальным приложением xterm).

Если вам нужно сделать это из вашего текстового приложения, вы можете попробовать проверить, действительно ли что-то делает переключение в окно Tek. Например,

echo -en '\n\E[?38h' && echo -en 12345678 && echo -en '\E\003' && \
    echo -en '\e[6n' && sleep 1 && echo -en '\n'

печатает новую строку, переключается в окно Tek, печатает там какие-то символы, возвращается обратно в окно VT и запрашивает отчет о положении курсора. Поскольку вся печать была в режиме Tek, курсор должен оставаться в столбце 1. Однако, если терминал не поддерживает режим Tek, символы будут печататься в главном окне, а столбец будет >1.

person n. 1.8e9-where's-my-share m.    schedule 09.12.2017

Последовательность атрибутов отправляющего устройства заставит терминал ответить загадочной строкой. Такие программы, как vim, используют это, чтобы проверить, с какой версией xterm они имеют дело, но я не знаю конкретной документации для интерпретации результатов. Возможно, чтение источника?

Видеть:

Что такое escape-кодовая последовательность ANSI ESC[›c?

Попробуй сам:

 printf "\E[c\n" ; sleep 1 ; echo

Мой терминал, совместимый с xterm, не совместимый с xterm, говорит "\E[?1;2c" обратно.

person Cupcake Protocol    schedule 08.12.2017
comment
Это идентифицирует его как (неграфический) vt100. Соответствующий запрос/ответ для Tek4014 отсутствует. - person Thomas Dickey; 08.12.2017