Jak mogę sprawdzić, które definicje terminali są dostępne?

16

Większość pytań jest w tytule, ale należy trochę rozwinąć:

Na większości Linuksów mogę find /usr/share/terminfo -type f. Ale na komputerze Solaris mam w pobliżu - ten katalog nawet nie istnieje.

Mógłbym iterować listę terminali i zrobić coś takiego:

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

Ale jest wolny. Czy są jakieś opcje, aby odkryć ścieżkę używaną przez tputdefinicje terminali i sam uruchomić „znaleźć”?


źródło

Odpowiedzi:

9

W systemie Solaris 10 możesz wykonać:

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

Powinieneś być w stanie zrobić coś takiego:

find /usr -type d -name terminfo -print

aby znaleźć lokalizację katalogu.

Możesz także przeczytać, aby znaleźć dokładną ścieżkę:

man terminfo
Karlson
źródło
To wspaniale, ale mam z tym jeden mały problem - jak znaleźć ścieżkę bez grepowania człowieka? Czy jest jakiś sposób, aby to zrobić?
Poprawiłem odpowiedź.
Karlson
10

Program infocmp w „dowolnym” systemie obsługującym terminfo wyświetla nazwę ścieżki, w której znajduje opis terminala dla bieżącego terminala. Na przykład (w tym przypadku 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,
        ...

W przypadku ncurses jest to bardziej skomplikowane, ponieważ możesz mieć wiele baz danych terminfo, a wpisy nie muszą być pojedynczymi plikami. Domyślna jest jedna baza danych i jeden plik na pozycję , aby zapewnić zgodność z systemami uniksowymi.

-DRozwiązaniem dla tic i infocmp (dodanego późno w 2011 roku ) jest jednym ze sposobów, aby wyświetlić dodatkowe informacje. Na przykład na moim Debian7 widzę to:

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

Na moim komputerze FreeBSD 10 używam hashowanych baz danych:

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

Alternatywnie można użyć toeprogramu do wygenerowania raportu o wszystkich dostępnych pozycjach terminala. Korzystanie z opcji -si -apozwala łączyć rzeczy (takie jak conflictprogram):

--> /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
...
Thomas Dickey
źródło
0

W systemie Linux możesz stracesprawdzić, które wywołania systemowe są używane przez program. Poniżej wymieniono wszystkie wywołania systemowe „open (2)” i przefiltrowano je, sedaby, miejmy nadzieję, plik terminfo użyty tputdo przetłumaczenia możliwości terminfo dla bieżącego terminala.

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

Zauważ, że to wyrażenie sed zakłada, że ​​twoje pliki terminfo są przechowywane w ścieżce zawierającej wzorzec „terminfo”. Jeśli to Cię martwi, możesz użyć innego założenia i wybrać ostatnie „otwarte” wywołanie systemowe.

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

Na koniec możesz po prostu zrzucić listę ścieżek wyszukiwania terminfo za pomocą infocmp -Dlub tic -D. Spowoduje to wyświetlenie ich wkompilowanych ścieżek wyszukiwania terminfo. Są to te same ścieżki, których szukają przekleństwa.

Noah Spurrier
źródło