Bagaimana saya bisa memeriksa definisi terminal mana yang tersedia?

16

Sebagian besar pertanyaan ada dalam judul, tetapi untuk sedikit menguraikan:

Pada kebanyakan Linux saya bisa find /usr/share/terminfo -type f. Tetapi pada mesin Solaris yang saya miliki di dekatnya - direktori ini bahkan tidak ada.

Saya bisa beralih ke daftar terminal, dan melakukan sesuatu seperti:

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

Tapi lambat. Adakah opsi untuk menemukan jalur yang digunakan oleh tputdefinisi terminal, dan menjalankan "temukan" sendiri?


sumber

Jawaban:

9

Pada Solaris 10 Anda dapat melakukan:

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

Anda harus dapat melakukan sesuatu seperti:

find /usr -type d -name terminfo -print

untuk menemukan di mana direktori berada.

Anda juga dapat membaca untuk menemukan jalur yang tepat:

man terminfo
Karlson
sumber
Ini bagus, tapi saya punya satu masalah kecil dengan itu - bagaimana saya bisa menemukan jalan, tanpa menangkap output manusia? Apakah ada cara untuk melakukannya?
Saya telah mengubah jawabannya.
Karlson
10

Program infocmp pada sistem "apa saja" yang mendukung terminfo akan memperlihatkan pathname di mana ia menemukan deskripsi terminal untuk terminal saat ini. Misalnya (AIX dalam hal ini):

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

Untuk ncurses, ini lebih rumit, karena Anda dapat memiliki banyak database terminfo, dan entri tidak harus berupa file individual. Database tunggal dan satu file per entri adalah default , untuk kompatibilitas dengan sistem Unix.

The -Dpilihan untuk tic dan infocmp (ditambahkan di akhir 2011 ) adalah salah satu cara untuk menunjukkan informasi tambahan. Misalnya, di Debian7 saya, saya bisa melihat ini:

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

Pada mesin FreeBSD 10 saya, saya menggunakan basis data hash:

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

Atau, seseorang dapat menggunakan toeprogram untuk menghasilkan laporan dari semua entri terminal yang tersedia. Menggunakan -sdan -aopsi memungkinkannya menggabungkan hal-hal (seperti 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
sumber
0

Di Linux Anda dapat menggunakan straceuntuk melihat panggilan sistem yang digunakan suatu program. Berikut ini akan mencantumkan semua panggilan sistem "terbuka (2)" dan memfilternya seduntuk menunjukkan, semoga, file terminfo digunakan oleh tputuntuk menerjemahkan kemampuan terminfo untuk terminal saat ini.

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

Perhatikan bahwa ekspresi sed mengasumsikan bahwa file terminfo Anda disimpan di jalur dengan pola "terminfo" di dalamnya. Jika itu membuat Anda khawatir maka Anda dapat menggunakan asumsi yang berbeda dan memilih panggilan sistem "terbuka" terakhir.

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

Akhirnya, Anda bisa membuang daftar jalur pencarian terminfo menggunakan infocmp -Datau tic -D. Ini akan mendaftar jalur pencarian terminfo yang dikompilasi. Ini adalah jalan yang sama yang dicari oleh kutukan.

Noah Spurrier
sumber