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.