¿Cómo puedo verificar qué definiciones de terminal están disponibles?

16

La mayor parte de la pregunta está en el título, pero para explicar un poco:

En la mayoría de Linux que puedo find /usr/share/terminfo -type f. Pero en la máquina Solaris que tengo cerca, este directorio ni siquiera existe.

Podría iterar sobre una lista de terminales y hacer algo como:

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

Pero es lento. ¿Alguna opción para descubrir la ruta utilizada por tputlas definiciones de terminal y ejecutar "find" yo mismo?


fuente

Respuestas:

9

En Solaris 10 puede hacer:

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

Deberías poder hacer algo como:

find /usr -type d -name terminfo -print

para encontrar dónde se encuentra el directorio.

También puedes leer para encontrar la ruta exacta:

man terminfo
Karlson
fuente
Esto es genial, pero tengo un pequeño problema con él: ¿cómo puedo encontrar el camino, sin engordar la salida del hombre? ¿Hay alguna forma de hacerlo?
He modificado la respuesta.
Karlson
10

El programa infocmp en "cualquier" sistema que admite terminfo muestra el nombre de ruta donde encuentra la descripción del terminal para el terminal actual. Por ejemplo (AIX en este caso):

$ 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,
        ...

Para ncurses, es más complicado, porque puede tener múltiples bases de datos terminfo, y las entradas no necesitan ser archivos individuales. El valor predeterminado es una sola base de datos y un archivo por entrada , por compatibilidad con los sistemas Unix.

La -Dopción para tic e infocmp (agregado a fines de 2011 ) es una forma de mostrar la información adicional. Por ejemplo, en mi Debian7, puedo ver esto:

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

En mi máquina FreeBSD 10, uso bases de datos hash:

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

Alternativamente, uno puede usar el toeprograma para producir un informe de todas las entradas de terminal disponibles. El uso de las opciones -sy le -apermite combinar cosas (como el conflictprograma):

--> /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
fuente
0

En Linux puede usar stracepara ver qué llamadas al sistema usa un programa. Lo siguiente enumerará todas las llamadas al sistema "abierto (2)" y las filtrará sedpara mostrar, con suerte, el archivo terminfo utilizado tputpara traducir la capacidad terminfo para el terminal actual.

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

Tenga en cuenta que esa expresión sed supone que sus archivos terminfo se almacenan en una ruta con el patrón "terminfo". Si eso le preocupa, podría usar una suposición diferente y elegir la última llamada del sistema "abierta".

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

Finalmente, puede volcar la lista de rutas de búsqueda de terminfo usando infocmp -Dotic -D . Estos enumerarán sus rutas de búsqueda terminfo compiladas. Estos son los mismos caminos buscados por las maldiciones.

Noah Spurrier
fuente