Saya sedang dalam proses pewarnaan terminal saya PS1
.
Saya mengatur variabel warna menggunakan tput
; misalnya, inilah ungu:
PURPLE=$(tput setaf 125)
Pertanyaan:
Bagaimana cara menemukan kode warna (mis. 125
) Warna lain?
Apakah ada panduan tabel warna / cheat sheet di suatu tempat?
Saya hanya tidak yakin apa 125
itu ... Apakah ada cara untuk mengambil warna hex dan mengubahnya menjadi angka yang setaf
dapat digunakan?
Jawaban:
Hitungan warna yang tersedia untuk tput diberikan oleh
tput colors
.Untuk melihat 8 warna dasar (seperti yang digunakan oleh
setf
di terminal urxvt dansetaf
di terminal xterm):Dan biasanya dinamai seperti ini:
Untuk melihat 256 warna yang diperluas (seperti yang digunakan oleh
setaf
dalam urxvt):Jika Anda menginginkan angka dan output yang dipesan:
16 juta warna memerlukan sedikit kode (beberapa konsol tidak dapat menampilkan ini).
Dasar-dasarnya adalah:
fb
adalahfront/back
atau3/4
.Tes sederhana dari kapasitas konsol Anda untuk menampilkan begitu banyak warna adalah:
Ini akan menghadirkan garis merah dengan perubahan nada yang sangat kecil dari kiri ke kanan. Jika perubahan kecil itu terlihat, konsol Anda mampu 16 juta warna.
Masing-masing
r
,,g
danb
merupakan nilai dari 0 hingga 255 untuk RGB (Merah, Hijau, Biru).Jika jenis konsol Anda mendukung ini, kode ini akan membuat tabel warna:
Untuk mengonversi nilai warna hex ke indeks warna 0-255 (terdekat):
Gunakan sebagai:
Untuk menemukan nomor warna seperti yang digunakan dalam format warna HTML :
Gunakan sebagai ("dasar" adalah 16 warna pertama, "warna" adalah kelompok utama, "abu-abu" adalah warna abu-abu terakhir):
sumber
fromhex
. Terima kasih lagi! Juga, saya menambahkan cek untuk#
. Umpan balik?hex=${1#"#"}
. Ini tidak akan menghapus apa pun jika$1
tidak memiliki#
, dan menghapusnya jika ada. Lihat kode saya yang diperbarui.\e[0;%s8;2;%s;%s;%sm
saya tidak memberi saya 16 juta warna, hanya warna dalam palet 240 warna yang paling dekat dengan rgb yang diminta.Jawaban singkatnya adalah Anda dapat menemukan tabel warna di web dan mencocokkannya dengan nomor warna.
Jawaban panjangnya adalah bahwa pemetaan yang benar tergantung pada terminal -
Ini
125
adalah parameter untuk urutan pelarian yang disebutsetaf
dalam deskripsi terminal.tput
tidak memiliki arti khusus pada nomor tersebut. Itu sebenarnya tergantung pada emulator terminal tertentu.Beberapa waktu yang lalu, ANSI menetapkan kode untuk 8 warna, dan ada dua skema untuk penomoran itu. Keduanya terlihat dalam beberapa deskripsi terminal sebagai pasangan
setf/setb
atausetaf/setab
. Karena yang terakhir memiliki konotasi "warna ANSI", Anda akan melihat yang digunakan lebih sering. Mantan (setf / setb) mengganti urutan untuk merah / biru seperti yang tercantum dalam FAQ ncurses. Mengapa merah / biru dipertukarkan? , tetapi dalam kedua kasus tersebut, skema dibuat hanya untuk penomoran warna. Tidak ada hubungan yang telah ditentukan antara angka-angka dan konten RGB.Untuk emulator terminal tertentu, ada palet warna yang telah ditentukan yang dapat dihitung dengan cukup mudah - dan dapat diprogram menggunakan urutan pelarian ini. Tidak ada standar yang relevan, dan Anda akan melihat perbedaan antara emulator terminal, seperti yang tercantum dalam FAQ xterm. Saya tidak suka warna biru .
Namun, konvensi sering dikacaukan dengan standar. Dalam pengembangan xterm selama 20 tahun terakhir, ia menggabungkan warna ANSI (8), mengadaptasi
aixterm
fitur (16) warna, menambahkan ekstensi untuk 88 dan 256 warna. Banyak dari itu telah diadopsi oleh pengembang lain untuk emulator terminal yang berbeda. Itu dirangkum dalam FAQ xterm Mengapa tidak membuat "xterm" disamakan dengan "xterm-256color"? .Kode sumber xterm menyertakan skrip untuk mendemonstrasikan warna, misalnya, menggunakan urutan pelarian yang sama yang
tput
akan digunakan.Anda juga dapat menemukan pertanyaan / jawaban ini bermanfaat: Nilai RGB dari warna dalam indeks warna diperluas Ansi (17-255)
sumber
The
tput
utilitas menggunakan tabel pencarian 256-warna untuk mencetak ANSI escape sequence 8-bit (dimulai dengan Escdan[
) yang menggunakan kemampuan terminal , sehingga urutan kontrol ini dapat diartikan sebagai warna. Ini adalah kumpulan 256 warna yang telah ditentukan sebelumnya yang biasa digunakan pada kartu grafis.Untuk mencetak semua 256 warna di terminal, coba one-liner berikut:
Petunjuk: Tambahkan
| column
ke daftar kolom.Tabel pencarian 256-warna ini juga dapat ditemukan di halaman Wikipedia sebagai berikut:
sumber
Dengan zsh dan di terminal-like
xterm
(xterm
danvte
-based terminal sepertignome-terminal
,xfce4-terminal
... setidaknya), Anda dapat melakukan:Setara bash:
(Anda ingin urutan escape untuk menanyakan warna yang akan dikirim setelah disiplin terminal
echo
dinonaktifkan (dengan-s
) jika tidak, responsnya akan ditampilkan oleh disiplin garis setengah dari waktu, maka pengirimannya sebagai bagian dariread
prompt (var?prompt
dalam zsh seperti di ksh,-p prompt
di bash)).untuk mendapatkan definisi warna 125 (di sini sebagai spesifikasi RGB, masing-masing bilangan menjadi intensitas komponen Merah, Hijau dan Biru sebagai bilangan heksa antara 0 dan FFFF).
Anda dapat melakukan hal yang sama untuk 16 warna pertama dengan
xtermcontrol
perintah:sumber
tput colors
melaporkan hanya8
jika terminal mampu menyajikan 256 warna. Juga, xterm-color (Konsole)tput colors
hanya melaporkan8
bahkan jika terminal itu sepenuhnya mampu menghadirkan 16 juta warna (dan tentu saja semua 256 warna). Dan tidak, tidak ada tmux atau layar yang dapat "mewarnai" :-) (ubahlah itu) hasilnya (saya tahu detail itu). Singkatnya: kode Anda mungkin gagal di beberapa terminal / konsol.ANSI Colors pada istilah konsol
Tergantung pada protokol istilah yang digunakan konsol Anda, urutannya bisa:
\e[38;5;XXXm
atau di\e[3XXXm
manaXXX
sesuai dengan nomor ansi.Untuk memastikan Anda menggunakan urutan ANSI yang tepat, Anda harus menggunakan
tput
.Mengenai kode pelarian ANSI Wikipedia , saya menulis ini:
Dapat membuat sesuatu seperti:
... Lalu, karena saya benci runnig lebih dari 200 garpu dalam naskah kecil, saya menulis ini:
Dengan hanya 1 garpu! Hasil yang sama, tetapi jauh lebih cepat!
sumber