Como posso verificar quais definições de terminal estão disponíveis?

16

A maior parte da pergunta está no título, mas para elaborar um pouco:

Na maioria dos Linux que posso find /usr/share/terminfo -type f. Mas na máquina Solaris que tenho por perto - esse diretório nem existe.

Eu poderia percorrer uma lista de terminais e fazer 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

Mas é lento. Alguma opção para descobrir o caminho usado pelas tputdefinições de terminal e executar "me encontrar"?


fonte

Respostas:

9

No Solaris 10, você pode:

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

Você deve ser capaz de fazer algo como:

find /usr -type d -name terminfo -print

para descobrir onde o diretório está localizado.

Você também pode ler para encontrar o caminho exato:

man terminfo
Karlson
fonte
Isso é ótimo, mas eu tenho um pequeno problema com ele - como posso encontrar o caminho, sem saudar a saída do homem? Existe alguma maneira de fazer isso?
Eu alterei a resposta.
26412 Karlson
10

O programa infocmp no sistema "any" que suporta terminfo mostra o nome do caminho onde encontra a descrição do terminal atual. Por exemplo (AIX neste 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, é mais complicado, porque você pode ter vários bancos de dados terminfo e as entradas não precisam ser arquivos individuais. Um único banco de dados e um arquivo por entrada é o padrão , para compatibilidade com sistemas Unix.

A -Dopção para tic e infocmp (adicionada no final de 2011 ) é uma maneira de mostrar as informações extras. Por exemplo, no meu Debian7, eu posso ver isso:

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

Na minha máquina FreeBSD 10, eu uso bancos de dados hash:

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

Como alternativa, pode-se usar o toeprograma para produzir um relatório de todas as entradas de terminal disponíveis. O uso das opções -se -apermite combinar coisas (como o 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
fonte
0

No Linux, você pode usar stracepara ver qual sistema chama um programa usa. A seguir, listaremos todas as chamadas do sistema "open (2)" e as filtraremos sedpara mostrar, esperançosamente, o arquivo terminfo usado tputpara traduzir o recurso terminfo do terminal atual.

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

Observe que essa expressão sed supõe que seus arquivos terminfo estejam armazenados em um caminho com o padrão "terminfo" nele. Se isso lhe preocupa, você pode usar uma suposição diferente e escolher a última chamada de sistema "aberta".

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, você pode simplesmente despejar a lista de caminhos de pesquisa terminfo usando infocmp -Dou tic -D. Eles listarão seus caminhos de pesquisa terminfo compilados. Esses são os mesmos caminhos pesquisados ​​por maldições.

Noah Spurrier
fonte