Соответствие возможностям `terminfo`

Есть ли способ сопоставить функции терминала / консоли с записями в базе данных terminfo?

Например, чтобы найти наиболее близкое совпадение с консолью Windows или другим типом нетрадиционного терминала.

Онлайн-сервисов нет, поэтому я ожидаю, что проблема нетривиальна, и интересно знать, почему.

ОБНОВЛЕНИЕ: база данных Terminfo предоставляет набор функций для известного типа или имени терминала. Я пытаюсь выполнить обратную задачу - сопоставить функции неизвестного терминала с существующими записями terminfo.

ОБНОВЛЕНИЕ2: Как это должно работать...

  1. Я выбираю свои возможности терминала из длинного списка
  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 поэтому я буду публиковать лучшие результаты, когда у меня будет больше времени.

Другие вопросы по тегам