Saya ingin tahu apakah ada cara untuk memeriksa apakah program saya dapat menampilkan keluaran terminal menggunakan warna atau tidak.
Menjalankan perintah suka less
dan melihat keluaran dari program yang keluarannya menggunakan warna, keluarannya ditampilkan salah
[ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m]
Terima kasih
Jawaban:
Anda menggunakan bahasa apa aplikasi Anda?
Pendekatan normal adalah memeriksa apakah perangkat keluaran adalah tty, dan jika ya, periksa apakah jenis terminal tersebut mendukung warna.
Dalam
bash
, itu akan terlihat sepertiDi C, Anda harus melakukan lebih banyak pengetikan, tetapi dapat mencapai hasil yang sama menggunakan isatty dan fungsi-fungsi yang terdaftar di
man 3 terminfo
.sumber
Ini seharusnya cukup:
warna tput menjelaskan:
Jika Anda melihat halaman manual, Anda akan melihat ini:
Dan...
Termcap
colors
ada di database terminfo, jadi Anda bisa memintanya. Jika Anda memiliki status keluar nol, maka termcap dikompilasi. Tetapi jika Anda memiliki sesuatu seperti:Ini menunjukkan bahwa tidak diketahui kemungkinan tidak ada. Jadi ini:
Menunjukkan bahwa perintah Anda benar.
Cara bermanfaat lainnya:
Tepuk tangan
sumber
colors
tidak didokumentasikan dalamtput
halaman manual (!), jadi haruskah saya mencari angka> = 8 di stdout atau kode pengembalian 0?colors
kemampuan didokumentasikan dalam terminfo (5) . Pengujian menggunakantput -T dumb colors
,tput -T vt220 colors
,tput -T linux colors
,tput -T xterm colors
menunjukkan nilai-nilai umum adalah-1
(tidak ada dukungan warna) dan8
(8 warna). Perhatikan bahwa ini hanya berlaku setelah memeriksa perangkat keluaran adalah terminal (misalnya[ -t 1 ]
atauisatty
).tput colors
mengembalikan apa yang dipikirkan database terminal lokal tentang terminal. Ini mungkin atau mungkin tidak sesuai dengan apa yang sebenarnya dapat dilakukan terminal, terutama untuk jenis terminal sepertixterm
yang datang dalam banyak varian (mulai dari hitam dan putih hingga 256 warna).Untuk kasus penggunaan ini, program apa yang biasanya dilakukan (misalnya GNU ls atau GNU grep with
--color=auto
) adalah menggunakan warna jika outputnya menuju ke terminal, dan tidak ada warna sebaliknya. Terminal yang tidak mendukung sekuens pengubah warna ANSI cukup langka sehingga dapat diterima pengguna untuk mengabaikan pilihan default. Bagaimanapun, pastikan aplikasi Anda memiliki opsi untuk mengaktifkan atau menonaktifkan warna.Dalam skrip shell, gunakan
[ -t 1 ]
untuk menguji apakah output standar adalah terminal.Dari program yang menggunakan C API, panggil
isatty(1)
.sumber
Coba gunakan
less --RAW-CONTROL-CHARS
.Dalam contoh ini saya menggunakan logtool , yang mencetak keluaran menggunakan warna.
Tanpa --RAW-CONTROL-CHARS:
Dengan --RAW-CONTROL-CHAR (Bayangkan ini dalam warna yang cantik. Juga, saya tidak yakin mengapa itu
^G
ditampilkan.):sumber
Itu akan menjadi kesalahan karena
less
tidak diatur untuk menafsirkan pelarian ANSI; mencariR
di$LESSOPTS
. Sedangkan untuk menentukan apakah sistem tahu terminal Anda dapat menangani warna,tput colors
akan menampilkan jumlah warna yang didukung atau-1
jika tidak mendukung warna. (Perhatikan bahwa beberapa terminal mungkin menggunakanxterm
bukanxterm-color
sebagai deskripsi terminal mereka, tetapi masih mendukung warna.)sumber
Jika Anda ingin menambahkan warna ke output tetapi hanya ketika warna didukung, Anda dapat menggunakannya
tput
. http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.htmlsumber