Memeriksa berapa banyak warna yang didukung emulator terminal saya

21

Apakah ada cara yang dapat diandalkan untuk memeriksa berapa banyak warna yang didukung emulator terminal saya?

Jika echo $TERMmencetak xterm, apakah itu dengan tegas memberi tahu saya berapa banyak warna yang didukung emulator terminal saya? Bagaimana saya bisa memeriksa informasi ini andal?

Amelio Vazquez-Reina
sumber

Jawaban:

20

Nilai $TERMtidak memberikan banyak informasi tentang jumlah warna yang didukung. Banyak terminal mengiklankan diri mereka sebagai xterm, dan mungkin mendukung sejumlah warna (2, 8, 16, 88 dan 256 adalah nilai umum).

Anda dapat meminta nilai setiap warna dengan OSC 4 ; c ; ? BEL urutan kontrol . Jika nomor warna cdidukung, dan jika terminal memahami urutan kontrol ini, terminal akan menjawab kembali dengan nilai warna. Jika nomor warna tidak didukung atau jika terminal tidak memahami urutan kontrol ini, terminal tidak menjawab apa pun. Berikut cuplikan bash / zsh untuk menanyakan apakah warna 42 didukung (dialihkan ke / dari terminal jika perlu):

printf '\e]4;%d;?\a' 42
if read -d $'\a' -s -t 1; then … # color 42 is supported

Di antara terminal populer, xterm dan terminal berdasarkan perpustakaan VTE (Gnome-terminal, Terminator, Xfce4-terminal, ...) mendukung urutan kontrol ini; rxvt, konsole, layar dan tmux tidak.

Saya tidak tahu cara yang lebih langsung.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Terima kasih @Gilles. Ini terlihat hebat. Bolehkah saya bertanya apa read -d $'\a' -s -t 1?
Amelio Vazquez-Reina
1
@intrpc Baca input hingga yang pertama \a(karakter bel), tanpa input gema, dengan batas waktu 1 detik.
Gilles 'SO- stop being evil'
5
@ l0b0 tput colorsmenanyakan basis data terminfo. Kemungkinannya adalah yang Anda miliki TERM=xterm. Xterm dapat mendukung setidaknya 2, 8, 16, 88 atau 256 warna tergantung pada versi dan opsi kompilasi dan run-time, tetapi database terminfo hanya dapat menyimpan satu nilai. Anda dapat mengatur mis TERM=xterm+256color, tetapi kemudian Anda akan merasa terganggu ketika Anda masuk ke mesin yang tidak memiliki entri ini di database termcap / terminfo-nya.
Gilles 'SO- stop being evil'
2
@ l0b0 Pipa Anda jelas tidak ada hubungannya dengan terminal. Anda perlu mencetak ke terminal ( printf … >/dev/tty) dan kemudian membaca dari terminal ( read … </dev/tty). Xterm merespons OSC 4; …; ? BELurutan tersebut dengan menyuntikkan penekanan tombol.
Gilles 'SO- stop being evil'
9

Anda dapat gunakan

$ tput colors

Pada debian saya menginstal tput adalah bagian dari ncurses-binpaket yang diinstal secara default.

Victor Klos
sumber
6
Itu hanya akan menginformasikan berapa banyak warna yang dilaporkan terminal Anda ke lingkungan melalui TERM, bukan berapa banyak warna yang benar-benar dapat didukung dengan tepatTERM
MestreLion