pengantar
Pertanyaan saya muncul dari perlunya memahami mengapa saya sekarang (setelah beberapa percobaan) Terminal dan tmux mendukung 256 warna dan tput colors
mengatakan kepada saya hanya ada 8 dari mereka.
Latar Belakang
Mari kita mulai dari awal.
Saya menggunakan kotak Ubuntu , Guake , tmux , Vim dan saya suka tema Solarized . Mereka terlihat sangat mengerikan, jadi saya memutuskan untuk mengaktifkan dukungan 256 warna dan sedikit bermain-main.
Mari kita lihat apa yang terjadi pada Terminal saya . tput colors
mengatakan ada 8 warna. Saya pribadi mengaturnya menjadi ungu, di sebelah kiri, dan tentu saja di sebelah kanan kita memiliki 2 warna biru yang berbeda. $TERM
kata xterm
. (Untuk memiliki warna ls
saya eval
ini di .bashrc
.)
Vim juga terlihat baik-baik saja, meskipun saya menyebutnya dengan 256
bendera di lingkungan di mana 256 warna tidak didukung.
set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized
Satu-satunya pria yang mengeluh tentang ruang warna berkurang adalah tmux . Memanggil tmux
memberikan hasil yang diharapkan "salah".
Tetapi memanggil tmux
dengan -2
bendera membuat semuanya bekerja dengan baik, secara ajaib .
Sekarang satu-satunya hal yang saya mengerti adalah yang -2
setara dengan export TERM=screen-256color
( sumber ).
Guake berperilaku analog dengan Terminal dan keduanya menjawab xterm
pertanyaan itu echo $TERM
.
Pertanyaan
Pada dasarnya, adakah yang mengerti mengapa semuanya bekerja bahkan jika tidak?
- Apakah saya sadis bahwa saya mengeluh mengapa sesuatu bekerja? Mungkin.
- Apakah ada alasan yang lebih baik? Tentu: Saya ingin memperbaiki tampilan kotak Ubuntu lainnya di kantor saya, dan saya ingin memahami mengapa semuanya bekerja atau tidak.
Eksperimen tambahan
Menjalankan skrip ini (sedikit dimodifikasi) pada saya xterm
memberikan hasil berikut: 256 warna, tetapi hanya 16 yang ditampilkan dengan benar.
Kemudian, mengubah profil terminal, juga 16 warna ini berubah.
Tes lebih lanjut mengikuti.
Dari kiri ke kanan, atas ke bawah, kami memiliki tema warna Terpolarisasi , dircolor
ansi-dark
dan 256dark
, kemudian skema warna default ( Tango ), dircolor
ansi-dark
dan 256dark
.
Pengamatan : secara teori skema warna dircolor
ansi-dark
on Solarized harus cocok dengan dircolor
256dark
. Ini tidak jelas terjadi untuk file yang terdaftar spesifik. Sebaliknya, ini cukup terjadi ketika di direktori kerja ada folder , file teks dan tautan simbolik . Kesimpulan : tidak banyak perhatian yang dibayarkan saat mengkode 256dark
warna.
Kesimpulan awal
xterm
mendukung 256 warna, terlepas dari apa yang tput colors
dikatakan. Program dapat merujuk pada ansi
palet (dapat disesuaikan oleh pengguna) atau menentukan warna mereka, memilih dari total 256 warna.
tput colors
adalah tes yang tidak dapat diandalkan. Bisakah Anda memeriksa kesimpulan awal saya ?tput colors
hanya dapat mengembalikan satu nilai dan di terminal yang mendukung 2,8,16,88 atau 256 warna, hanya nilai pertama (8 dalam kasus Anda) yang dikembalikan. Untuk mendapatkan nilai sebenarnya, gunakan skrip dari komentar terakhir saya. Apa yang kembali?Jawaban:
Ada beberapa informasi tentang dukungan 256-warna di FAQ tmux .
Mendeteksi jumlah warna yang didukung terminal sayangnya tidak mudah, karena alasan historis. Lihat Memeriksa berapa banyak warna yang didukung oleh emulator terminal saya untuk penjelasan. Ini artinya
Ketika Anda berada di tmux, terminal yang berinteraksi dengan Anda adalah tmux. Itu tidak mendukung semua urutan kontrol xterm. Secara khusus, itu tidak mendukung
OSC 4 ; …
urutan kontrol untuk kueri atau menetapkan nilai warna. Anda perlu menggunakannya saat langsung berjalan di xterm, di luar tmux.Jika Anda menjalankan
tmux -2
, maka tmux dimulai dengan dukungan 256-warna, bahkan jika itu tidak berpikir bahwa terminal Anda mendukung 256 warna (yang sangat umum).Secara default, tmux mengiklankan dirinya sendiri
screen
tanpa dukungan 256 warna. Anda dapat mengubah nilaiTERM
dalam.tmux.conf
untuk menunjukkan dukungan 256 warna:Anda dapat menggunakan
TERM=xterm-256color
atauTERM=screen-256color
di Ubuntu. Nilai-nilai ini hanya akan menyebabkan masalah jika Anda masuk ke mesin jarak jauh yang tidak memiliki entri termcap / terminfo untuk nama-nama ini. Anda dapat menyalin entri ke direktori home Anda di mesin jarak jauh; ini bekerja dengan sebagian besar implementasi terminfo modern.sumber
xterm
bisa menunjukkan kepada saya 256 warna meskipuntput colors
mengatakan 8. Saya kira jawaban untuk pertanyaan khusus ini telah ditanggapi oleh @terdon dalam komentarnya untuk pertanyaan itu sendiri.set -g default_terminal "screen-256color"
perintah ini tidak cukup untuk mengaktifkan 256 warna dalam tmux . Anda perlualias tmux='export TERM=screen-256color; /usr/bin/tmux'
( referensi ).tmux -2
sesuai paragraf saya sebelumnya, jika tmux tidak berpikir terminal Anda saat ini mendukung 256 warna, jadialias tmux='tmux -2'
masuk akal.TERM=xterm-256color tmux
, yang masuk akal, tidak sepertiTERM=screen-256color tmux
.tmux -2
lebih unggul karena berfungsi meskipunscreen-256color
tidak ada dalam basis data terminfo lokal.Saya terkesan dengan betapa kayanya format dan detail jawaban (dan pertanyaannya!). Sementara mereka memberikan info dan solusi berharga tentang alat yang Anda sebutkan, mereka memberikan sedikit sekali wawasan tentang apa yang sedang terjadi , dan, yang paling penting, mengapa hal-hal (agak) bekerja untuk beberapa alat ketika mereka seharusnya tidak melakukannya.
Jadi, inilah beberapa wawasan tentang pertanyaan mendasar Anda:
Apa yang didukung terminal dan apa yang dilaporkan adalah hal yang berbeda. Terminal Gnome misalnya mampu menampilkan 256 warna, tetapi ia mengumumkan dirinya ke lingkungan (via
$TERM
variabel) sebagaixterm
emulator (8 warna).Alat-alat seperti
tput
ikuti apa punTERM
yang diatur ke:tput colors
dapat mencetak 8, sementaraenv TERM=xterm-256color tput colors
akan mencetak 256, terlepas dari apakah terminal Anda benar-benar mendukung kemampuan tersebut.vim
juga mengikutiTERM
secara default, tetapi seperti yang Anda katakan untuk menggunakan 256 warna (melalui bendera atauset t_Co=256
), itu akan menggunakan 256 warna. Dan itu berfungsi karena terminal Anda benar-benar mendukungnya .tmux
, seperti halnya Terminal Gnome, juga secara default melaporkan dirinya sebagai terminal 8-warna. Tapi, tidak seperti Terminal Gnome, itu hanya memungkinkan kemampuan 256-warna jika Anda menggunakan-2
flag, yang juga membuatnya melaporkan dirinya sebagaixterm-256color
emulator yang kompatibel.xterm
, seperti pada perangkat lunak terminal emulator untuk X11 , pasti mendukung 256 warna. Tapixterm
seperti dalamTERM=xterm
8-warna "standar". Itu berarti kemampuan aslinyaxterm
. Ketika ditingkatkan untuk mendukung 256 warna, dahulu kala, ia menciptakanxterm-256color
istilah untuk itu.Jadi semuanya bermuara pada:
Kemampuan apa yang sebenarnya didukung terminal Anda (dan diaktifkan untuk melakukannya)
Cara melaporkan kemampuan seperti itu ke lingkungan melalui
TERM
Bagaimana alat menafsirkan
TERM
dan menyesuaikan diri sesuai.Seperti yang dapat Anda simpulkan dari yang di atas, hindari memalu
export TERM=xterm-256color
dalam~/.bashrc
skrip Anda dan semacamnya . Ketika file-file tersebut dieksekusi terlepas dari terminal yang sebenarnya Anda gunakan, itu akan membuat semua terminal Anda, termasuk koneksi jarak jauh dari Windows dengan Putty, terminal konsol Linux, dll., Melaporkan diri mereka sebagai kompatibel xterm-256color. Yang mungkin benar untuk beberapa orang tetapi tentu saja tidak untuk semua. Misalnya,getty
konsol linux yang Anda aksesCTRL+ALT+1..6
, tidak.Terminal harus melaporkan diri mereka sebagai "standar" yang paling cocok dengan mereka. Jika Anda tahu mereka dapat menangani 256 warna, konfigurasikan untuk mengiklankannya.
Terakhir namun tidak sedikit, bacaan yang menakjubkan tentang
TERM
dan 256 warna adalah:http://blog.sanctum.geek.nz/term-strings/
http://blog.sanctum.geek.nz/256-colour-terminals/
sumber
Saya akan memberikan jawaban komplementer yang hanya membahas eksperimen tambahan Anda sejauh yang terkait dengan warna direktori terlarut .
Mempersiapkan
Kami memiliki keluaran warna yang sama dari skrip uji. Satu-satunya perbedaan adalah bahwa saya digunakan
lxterminal
pada Openbox dengan ramping , xcompmgr dan tidak ada DM. Karenanya saya tidak dapat dengan mudah mengatur palet kustom seperti yang Anda lakukan karena emulator terminal tidak menawarkan pengaturan tersebut dalam GUI dan tidak ada tema khusus untuk itu (yang hanya ada untuk beberapa terminal emulator). Jadi saya hanya menggunakan beberapa transparensi, terminal yang tidak didekorasi dan yang biru sebagai warna latar depan dengan latar belakang Gentoo biru . Karena saya tidak dapat menggunakan versi ansi dari file warna, saya fokus secara eksklusif untuk mendapatkan hasil dengandircolors.256dark
versi sederhana "terdegradasi".Saya menggunakan konfigurasi yang relevan berikut dan Inconsolata huruf menengah:
Dircolors
Gambar di bawah ini menunjukkan apa yang terjadi di dalam dan di luar tmux dengan pengaturan ini. Yang ketiga pertama ke kiri menunjukkan windows lxterminal undecorated ditumpuk secara vertikal (3). Di sebelah kanan Anda memiliki rakitan tmux yang menunjukkan program identik yang sama (3) Saya juga menyertakan 1 solarized yang menampilkan nano menggunakan file .Xresources yang disertakan dalam paket lengkap (dan mencicipi dengan ):
xterm
xrdb -load ~/.Xresources
silakan klik kanan / lihat gambar untuk memeriksa dengan resolusi penuh
Terminal pertama di sudut kiri atas menampilkan warna direktori default. Tepat di bawah ini adalah versi solarized yang terdegradasi . Kecuali untuk pink di latar belakang biru untuk
.c
file yang saya tambahkan, itu identik dengan apa yang diharapkan dari ini (lihat gambar di bawah untuk referensi). Dibandingkan dengan default, itu dibangun lebih lanjut pada atribut yang diperluas yaitu tebal / terang / mundur dll dan warnanya berbeda jelas. Penetapan warna default untuk.txt
file dalam banyak distribusi berwarna hijau, tetapi seharusnya berwarna abu-abu saat disatukan . File ansi yang merender file .txt sebagai warna hijau tidak dapat ditampilkan dengan benar atau tidak ditampilkan sama sekali. Hasil sisi kanan yang Anda tunjukkan adalah yang benar (256dark) dalam kaitannya dengan referensi berikut:peta referensi dircolors "terdegradasi" terlarutkan
Pengamatan
Dengan konfigurasi yang saya gunakan, hasilnya tampak identik di dalam dan di luar tmux (saya telah membalikkan komentar (#) in vi tetapi jika tidak, plugin berperilaku sebagaimana mestinya dan multiplexer tidak berdampak pada ini). Font memainkan peran besar dalam definisi fitur yang solarized , dan font yang baik diperlukan untuk memaksimalkan pengalaman. The solarized warna direktori menggunakan 256dark berkas sesuai referensi dan tidak memerlukan konfigurasi emulator tertentu terminal.
Kesimpulan
Sebenarnya rendering ansi dari warna direktori sama sekali berbeda dari degradasi yang terdegradasi (256dark). Sedemikian rupa sehingga di bawah file ansi
.txt
berwarna hijau. Satu tidak dapat digunakan untuk memvalidasi rendering yang lain. Kedua solusi memerlukan konfigurasi yang berbeda dan menghasilkan hasil yang sama sekali berbeda.sumber
ansi-dark
output yang benar (karena menggunakan versi yang tidak terdegradasi). Kemudian, jika Anda mengambil referensi dari output256dark
, maka Anda memiliki pola pikir terbalik.