Come posso verificare quali definizioni di terminale sono disponibili?


16

La maggior parte della domanda è nel titolo, ma per elaborare un po ':

Sulla maggior parte dei Linux posso find /usr/share/terminfo -type f. Ma sulla macchina Solaris ho nelle vicinanze - questa directory non esiste nemmeno.

Potrei scorrere un elenco di terminali e fare qualcosa del tipo:

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

Ma è lento. Qualche opzione per scoprire il percorso usato dalle tputdefinizioni dei terminali ed eseguire "find" da solo?

Risposte:


9

Su Solaris 10 puoi fare:

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

Dovresti essere in grado di fare qualcosa del tipo:

find /usr -type d -name terminfo -print

per trovare dove si trova la directory.

Puoi anche leggere per trovare il percorso esatto:

man terminfo

Questo è fantastico, ma ho un piccolo problema con esso: come posso trovare il percorso, senza inghiottire l'output di man? C'è un modo per farlo?

Ho modificato la risposta.
Karlson,

10

Il programma infocmp su "qualsiasi" sistema che supporta terminfo sembra mostrare il percorso in cui trova la descrizione del terminale per il terminale corrente. Ad esempio (AIX in questo 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,
        ...

Per ncurses, è più complicato, perché è possibile disporre di più database terminfo e le voci non devono necessariamente essere singoli file. Un singolo database e un file per voce è l' impostazione predefinita , per la compatibilità con i sistemi Unix.

L' -Dopzione per tic e infocmp (aggiunta alla fine del 2011 ) è un modo per mostrare le informazioni extra. Ad esempio, sul mio Debian7, posso vedere questo:

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

Sul mio computer FreeBSD 10, utilizzo database con hash:

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

In alternativa, è possibile utilizzare il toeprogramma per produrre un rapporto di tutte le voci di terminale disponibili. L'uso delle opzioni -se -aconsente di combinare cose (come il conflictprogramma):

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

Su Linux puoi usare straceper vedere quali chiamate di sistema usa un programma. Di seguito elencheremo tutte le chiamate di sistema "open (2)" e le filtreremo sedper mostrare, si spera, il file terminfo utilizzato da tputper tradurre la funzionalità terminfo per il terminale corrente.

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

Nota che l'espressione sed presuppone che i tuoi file terminfo siano memorizzati in un percorso con il modello "terminfo" in esso. Se questo ti preoccupa, potresti usare un presupposto diverso e scegliere l'ultima chiamata di sistema "aperta".

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

Infine, puoi semplicemente scaricare l'elenco dei percorsi di ricerca terminfo usando infocmp -Do tic -D. Verranno elencati i percorsi di ricerca terminfo compilati. Questi sono gli stessi percorsi cercati dalle maledizioni.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.