Perintah ini tput
memiliki dua opsi berbeda untuk mengatur warna, setf
dan setaf
, namun keduanya tampaknya bekerja dengan baik di komputer saya:
$ tput setf 2 && echo 'Hello world!'
$ tput setaf 2 && echo 'Hello world!'
Tampaknya ada dualitas serupa dengan setb
dan setab
.
Apa perbedaan antara dua opsi?
terminfo(5)
halaman manual yang datang denganncurses
detail.Jawaban:
setf
terbatas hanya 8 warna.setaf
dapat mengatur hingga 256 warna.(semua informasi berikut akan spesifik untuk urxvt, karena itu adalah terminal saya, tetapi infonya akan serupa dengan, jika tidak sama, seperti terminal lainnya)
Keduanya
setf
dansetaf
memberikan kode pelarian yang berbeda. Anda dapat melihatnya di berikut ini:Dari
urxvt(7)
halaman manual saya :Jadi dari
xxd
output di atas , kita bisa melihat yangtput setf 2
menggunakanPm = 32
, yang akan mengatur warna menjadi hijau.tput setaf 2
di sisi lain menggunakanPm = 38;5
, yang akan mewakili kode warna yang didefinisikan dalam ISO 8613-6 (juga hijau).Dalam ISO 8613-6, warna 0x00-0x07 sama dengan warna standar, dan 0x08 - 0x0f adalah warna standar "tebal". Setelah Anda mendapatkan 0x10-0xff Anda mendapatkan warna baru.
Dicuri dari wikipedia :
sumber
tput
tampaknya tidak benar-benar menggunakan rentang urutan warna ANSI yang tersedia. Untuk apa punn > 7
,tput setaf n
tidak berpengaruh pada teks di terminal saya.tput setf 2
dantput setaf 2
yang kedua.[32m
.Dari manual:
man 5 terminfo
Jadi jawabannya adalah: setaf berarti Set ANSI foreground , yaitu menggunakan ANSI escape sequence, dan setf berarti Set Foreground (menggunakan beberapa sequence escape selain ANSI).
sumber
Dua set kemampuan menggunakan urutan berbeda untuk merah / biru dalam daftar warna ANSI.
Seperti disebutkan, dijelaskan di halaman buku panduan ncurses terminfo . Beberapa sejarah:
setf/setb
.Sf/Sb
kode yang sesuai daripadasetaf/setab
(danAF/AB
untuk termcap) - tetapi menggunakan urutan escape ANSI (yang bekerja dengan termcap) daripada menggunakan kemampuan yang benar dengan kemampuan ANSI.ANSI
setaf/setab
ditambahkan cukup terlambat dalam sejarah terminfo karena Anda dapat menyimpulkan dari posisi mereka dalam daftar string kemampuan . Ingatlah bahwa semua itu ditambahkan secara bertahap selama beberapa tahun, dan beberapa sistem berbeda (ncurses memiliki beberapa contoh sepertiCaps.hpux
membiarkannya dikompilasi agar sesuai dengan sistem tersebut). Itu menyumbang sejumlah kecil deskripsi terminal berguna yang dapat digunakan untuk referensi.Dengan semua itu, fakta bahwa
setf/setb
string yang ada tidak cocok dengan urutan ANSI tidak segera diperhatikan, yang menyebabkan beberapa perbaikan pada tahun 1998 , dan faq Mengapa merah / biru dipertukarkan? .Meskipun dimungkinkan untuk memperpanjang urutan ANSI 8-warna menjadi 16-warna (dengan mengandaikan bahwa warna 8-15 adalah versi yang lebih cerah dari 0-7), tidak ada alasan yang baik untuk menciptakan skema untuk memperpanjang
setf/setb
melewati 16 warna pertama.sumber