Hangi terminal tanımlarının kullanılabilir olduğunu nasıl kontrol edebilirim?


16

Sorunun büyük kısmı başlığında, ancak biraz ayrıntılandırmak için:

Çoğu Linux'ta yapabilirim find /usr/share/terminfo -type f. Ancak Solaris makinesinde yakında var - bu dizin bile yok.

Ben bir terminaller listesi üzerinde yineleme ve gibi bir şey yapabilir:

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

Ama yavaş. Herhangi bir seçenek tarafından tputterminal tanımları tarafından kullanılan yolu keşfetmek ve "kendimi" bulmak "çalıştırın?

Yanıtlar:


9

Solaris 10'da şunları yapabilirsiniz:

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

Şöyle bir şey yapabilmelisiniz:

find /usr -type d -name terminfo -print

dizinin nerede olduğunu bulmak için.

Tam yolu bulmak için de okuyabilirsiniz:

man terminfo

Bu harika, ama onunla ilgili küçük bir sorunum var - insan çıkışını selamlamadan yolu nasıl bulabilirim? Bunu yapmanın bir yolu var mı?

Cevabı değiştirdim.
Karlson

10

Terminfoyu destekleyen "herhangi bir" sistemdeki infocmp programı, geçerli terminalin terminal açıklamasını bulduğu yol adını gösterir. Örneğin (bu durumda AIX):

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

Birden çok terminfo veritabanına sahip olabileceğiniz ve girişlerin ayrı dosyalar olması gerekmediği için ncurses için daha karmaşıktır. Unix sistemleriyle uyumluluk için tek bir veritabanı ve giriş başına bir dosya varsayılan değerdir.

-DSeçeneği tic ve infocmp (katma 2011 yılında geç ) ek bilgileri göstermek için bir yoludur. Örneğin, Debian7'mde şunu görebiliyorum:

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

FreeBSD 10 makinemde karma veritabanları kullanıyorum:

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

Alternatif olarak, toeprogram mevcut tüm terminal girişlerinin bir raporunu üretmek için kullanılabilir. -sVe -aseçeneklerini kullanmak, işleri ( conflictprogram gibi ) birleştirmesini sağlar :

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

Linux'ta, stracebir programın hangi sistem çağrılarını kullandığını görmek için kullanabilirsiniz . Aşağıda tüm "open (2)" sistem çağrıları listelenecek ve mevcut terminal için terminfo kapasitesini çevirmek için sedkullanılan terminfo dosyası gösterilecek şekilde filtrelenecektir tput.

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

Sed ifadesinin, terminfo dosyalarınızın içinde "terminfo" desenine sahip bir yolda saklandığını varsaydığını unutmayın. Bu sizi endişelendiriyorsa, farklı bir varsayım kullanabilir ve son "açık" sistem çağrısını seçebilirsiniz.

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

Son olarak, infocmp -Dveya tuşlarını kullanarak terminfo arama yolları listesini dökebilirsiniz tic -D. Bunlar derlenmiş terminfo arama yollarını listeler. Bunlar lanetler tarafından aranan yollar.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.