Соответствие возможностям `terminfo`
Есть ли способ сопоставить функции терминала / консоли с записями в базе данных terminfo?
Например, чтобы найти наиболее близкое совпадение с консолью Windows или другим типом нетрадиционного терминала.
Онлайн-сервисов нет, поэтому я ожидаю, что проблема нетривиальна, и интересно знать, почему.
ОБНОВЛЕНИЕ: база данных Terminfo предоставляет набор функций для известного типа или имени терминала. Я пытаюсь выполнить обратную задачу - сопоставить функции неизвестного терминала с существующими записями terminfo.
ОБНОВЛЕНИЕ2: Как это должно работать...
- Я выбираю свои возможности терминала из длинного списка
- Matcher находит профили, которые либо
- 2.1. реализовать все эти возможности точно без других возможностей
- 2.2. реализовать практически все возможности точно без других возможностей
- 2,3. реализовать возможности именно с некоторыми другими возможностями
- 2,4. реализовать почти все возможности и добавляет некоторые другие возможности
3 ответа
Спасибо за ваш вопрос. Попробуйте это, с ncurses
пакет установлен:
infocmp | grep _Cap_name_
или же
infocmp _terminfo_name_ | grep _Cap_name_
а также
infocmp [-d|-c|-n] _wanted_ _have_
infocmp
сравнивает содержимое двух терминалов terminfo или отображает запись terminfo (двоичную) как termcap (текст, читаемый человеком)
В моей системе terminfo (s) находятся здесь:
/usr/share/terminfo
/lib/terminfo
Я ссылаюсь _Cap_name_
здесь, на opengroup.org
Поскольку вы работаете в Windows (возможно, без Cygwin), вам, возможно, придется вручную проверить возможности TERM
Если вы ожидаете, и встроите обходные пути, основанные на этих предварительных знаниях, но на Windows, так что их не может быть много.
TERMINFO=/user/share/terminfo toe
Это дает вам список терминалов. Если у вас есть контроль над сервером, добавьте файл terminfo самостоятельно, напишите его в виде текста termcap
форматировать, а затем преобразовать его или в terminfo
формат информации, а затем скомпилировать его. Таким образом, вы можете начать с dummy+linewrap
, Или попробуй ansi+idl
,
ПРИМЕЧАНИЕ: я согласен с другим комментарием об использовании библиотеки VT100/VT102.
Согласно вашему пересмотренному OP, снова используя ncurses
библиотека, C вы можете запросить терминал, используя tget
, Я не знаю способа итерации возможностей, не зная, какими они могут быть, прежде чем позвонить tget
Однако я знаю, что он вернется 0
для возможностей, которые возвращают целочисленные значения и не найдены, например. cMax = tget("max_colors");
,
Согласно terminfo, при компиляции конфигурации информации о терминале можно обеспечить (1-е) переопределение, (2-е) включенные терминалы, опционально (3-е) исключая включенные терминалы с определенными возможностями. Однако для этого все еще требуется доступ на запись в каталог базы данных terminfo целевого сервера, поэтому полученный вами файл terminfo может быть загружен.
База данных terminfo предоставляет серверам способ предоставления терминала и программы (включая удаленные) для интерпретации предоставленного терминала.
Пока что ответ - http://man7.org/linux/man-pages/man5/terminfo.5.html поэтому я буду публиковать лучшие результаты, когда у меня будет больше времени.