Как я могу проверить, какие определения терминалов доступны?

16

Основная часть вопроса в заголовке, но немного уточним:

На большинстве линуксов я могу find /usr/share/terminfo -type f. Но на машине Solaris у меня есть рядом - этот каталог даже не существует.

Я мог бы перебрать список терминалов и сделать что-то вроде:

for TERM in xterm xtermc xterm-color xterm-256color screen rxvt
do
    tput cols >/dev/null 2>/dev/null && echo "$TERM available"
done

Но это медленно. Любые варианты, чтобы обнаружить путь, используемый tputдля определения терминалов, и запустить "найти" себя?


источник

Ответы:

9

На Solaris 10 вы можете сделать:

find /usr/share/lib/terminfo -type f -print

Вы должны быть в состоянии сделать что-то вроде:

find /usr -type d -name terminfo -print

чтобы найти, где находится каталог.

Вы также можете прочитать, чтобы найти точный путь:

man terminfo
Карлсон
источник
Это замечательно, но у меня есть одна небольшая проблема - как я могу найти путь, не ограничиваясь выводом команды man? Есть ли способ сделать это?
Я исправил ответ.
Карлсон
10

Программа infocmp в «любой» системе, поддерживающей terminfo, показывает путь, по которому она находит описание терминала для текущего терминала. Например (в данном случае AIX):

$ infocmp vt100
#       Reconstructed via infocmp from file: /usr/share/lib/terminfo/v/vt100
vt100|vt100-am|Digital VT100,
        am, msgr, xenl, xon,
        cols#80, it#8, lines#24, vt#3,
        ...

Для ncurses это сложнее, потому что вы можете иметь несколько баз данных terminfo, и записи не обязательно должны быть отдельными файлами. Одна база данных и один файл на запись совместимости с системами Unix умолчанию используется .

-DВариантом для тика и infocmp (добавленных в конце 2011 года ) является одним из способов , чтобы показать дополнительную информацию. Например, на моем Debian7 я вижу это:

$ infocmp6 -D
/users/tom/.terminfo
/usr/local/ncurses/share/terminfo
/usr/share/terminfo
/lib/terminfo

На моей машине с FreeBSD 10 я использую хешированные базы данных:

$ infocmp -D
/usr/local/ncurses/share/terminfo.db
/usr/local/share/misc/terminfo
/etc/termcap

Кроме того, можно использовать toeпрограмму для создания отчета обо всех доступных записях терминала. Использование параметров -sи -aпозволяет объединять вещи (например, conflictпрограмму):

--> /users/tom/.terminfo
----> /usr/local/ncurses/share/terminfo
------> /usr/share/terminfo
--------> /lib/terminfo
--*-+---:       9term           Plan9 terminal emulator for X
--*---*-:       Eterm           Eterm with xterm-style color support (X Window System)
--*-*---:       Eterm-256color  Eterm with xterm 256-colors
--*-*---:       Eterm-88color   Eterm with 88 colors
--*-+---:       MtxOrb          Generic Matrix Orbital LCD display
--*-+---:       MtxOrb162       16x2 Matrix Orbital LCD display
--*-+---:       MtxOrb204       20x4 Matrix Orbital LCD display
--*-+---:       NCR260VT300WPP  NCR 2900_260 vt300 wide mode pc+  kybd
--*-+---:       aaa             ann arbor ambassador/30 lines
--*-+---:       aaa+dec         ann arbor ambassador in dec vt100 mode
--*-+---:       aaa+rv          ann arbor ambassador in reverse video
...
Томас Дики
источник
0

В Linux вы можете использовать, straceчтобы увидеть, какие системные вызовы использует программа. Следующее перечислит все системные вызовы open (2) и отфильтрует их, sedчтобы показать, мы надеемся, файл terminfo, используемый tputдля преобразования возможности terminfo для текущего терминала.

TERMINFO_FILE=$(strace -e open tput cud1 2>&1 | sed -n -e 's/^.*\(".*terminfo.*"\).*$/\1/p')
echo ${TERMINFO_FILE}

Обратите внимание, что это выражение sed предполагает, что ваши файлы terminfo хранятся в пути с шаблоном terminfo. Если вас это беспокоит, вы можете использовать другое предположение и выбрать последний «открытый» системный вызов.

TERMINFO_FILE=$(strace -e open tput cud1 2>&1 | grep -e "^open" | tail -n 1 | sed -n -e 's/^.*\(".*"\).*$/\1/p')
echo ${TERMINFO_FILE}

Наконец, вы можете просто вывести список путей поиска terminfo, используя infocmp -Dили tic -D. В них будут перечислены их скомпилированные пути поиска terminfo. Это те же самые пути, которые ищут проклятия.

Ноа Спурриер
источник