Як я можу перевірити, які визначення терміналів доступні?


16

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

На більшості Linux я можу 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

Це чудово, але у мене є одна невелика проблема з цим - як я можу знайти шлях, не маючи виведення людини? Це є якийсь спосіб зробити це?

Я змінив відповідь.
Карлсон

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}

Нарешті, ви можете просто скинути список пошукових шляхів у терміналі за допомогою infocmp -Dабо tic -D. Вони перерахують їх складені терміни пошуку шляхів пошуку. Це ті самі шляхи, які шукають прокляття.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.