Pengantar
Pertanyaan saya muncul dari perlunya memahami mengapa Saya punya sekarang (setelah beberapa kali percobaan) Terminal dan tmux mendukung 256 warna dan tput colors memberitahuku hanya ada 8 dari mereka.
Latar Belakang
Mari kita mulai dari awal.
Saya menggunakan Ubuntu kotak, Guake , tmux , Vim dan saya suka tema Solarized . Mereka terlihat sangat buruk, jadi saya memutuskan untuk mengaktifkan dukungan 256 warna dan bermain-main sedikit.
Mari kita lihat apa yang terjadi pada Terminal saya . tput colors katanya 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 ls . berwarna Saya eval ini di .bashrc saya .)

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 orang yang mengeluh tentang ruang warna yang berkurang adalah tmux . Memanggil tmux memberikan hasil yang diharapkan "salah".

Tapi memanggil tmux dengan -2 flag membuat semuanya bekerja dengan baik, secara ajaib .

Sekarang satu-satunya hal yang saya mengerti adalah bahwa -2 setara dengan export TERM=screen-256color (sumber).
Guake berperilaku analog dengan Terminal dan keduanya menjawab xterm untuk pertanyaan echo $TERM .
Pertanyaan
Pada dasarnya, adakah yang mengerti mengapa semuanya berfungsi meskipun tidak?
- Apakah saya sadis karena saya mengeluh mengapa semuanya berhasil? Mungkin.
- Apakah ada alasan yang lebih baik? Tentu:Saya ingin memperbaiki tampilan kotak Ubuntu lainnya di kantor saya, dan saya ingin memahami mengapa sesuatu bekerja atau tidak.
Eksperimen tambahan
Menjalankan skrip ini (sedikit dimodifikasi) di xterm saya memberikan hasil berikut:256 warna, tetapi hanya 16 yang ditampilkan dengan benar.

Kemudian, mengubah profil terminal, juga 16 warna ini berubah.

Tes lainnya menyusul.
Dari kiri ke kanan, atas ke bawah, kami memiliki Solarisasi tema warna, dircolor ansi-dark dan 256dark , lalu default (Tango ) skema warna, dircolor ansi-dark dan 256dark .

Pengamatan :secara teori dircolor ansi-dark di Solarisasi skema warna harus cocok dengan dircolor 256dark . Ini tidak jelas terjadi untuk file terdaftar tertentu. Sebaliknya, ini cukup terjadi ketika di direktori kerja ada folder , file teks dan tautan simbolik . Kesimpulan :tidak banyak perhatian yang diberikan saat menyandikan 256dark warna.
Kesimpulan awal
xterm mendukung 256 warna, terlepas dari apa tput colors mengatakan. Program dapat merujuk ke ansi palet (dapat disesuaikan oleh pengguna) atau tentukan warnanya, pilih dari total 256 warna.
Jawaban yang Diterima:
Ada beberapa informasi tentang dukungan 256-warna di FAQ tmux.
Terkait:Daftar shell yang mendukung kata kunci `local` untuk mendefinisikan variabel lokal?Mendeteksi jumlah warna yang didukung terminal sayangnya tidak mudah, karena alasan historis. Lihat Memeriksa berapa banyak warna yang didukung emulator terminal saya untuk penjelasan. Ini berarti bahwa
- tmux tidak dapat dengan andal menentukan apakah terminal mendukung lebih dari 8 warna;
- tmux tidak dapat berkomunikasi dengan andal ke aplikasi yang mendukung lebih dari 8 warna.
Saat Anda berada di tmux, terminal yang berinteraksi dengan Anda adalah tmux. Itu tidak mendukung semua urutan kontrol xterm. Secara khusus, ini tidak mendukung OSC 4 ; … urutan kontrol untuk menanyakan atau mengatur nilai warna. Anda perlu menggunakannya saat menjalankan langsung di xterm, di luar tmux.
Jika Anda menjalankan tmux -2 , kemudian tmux memulai dengan dukungan 256 warna, meskipun terminal Anda tidak mendukung 256 warna (yang cukup umum).
Secara default, tmux mengiklankan dirinya sebagai screen tanpa dukungan 256 warna. Anda dapat mengubah nilai TERM di .tmux.conf untuk menunjukkan dukungan 256 warna:
set -g default-terminal "screen-256color"
Anda dapat menggunakan TERM=xterm-256color atau TERM=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 pada mesin jarak jauh; ini berfungsi dengan sebagian besar implementasi terminfo modern.
# From the Ubuntu machine to a machine that doesn't have *-256color terminfo entries
ssh somewhere.example.com mkdir -p .terminfo/s .terminfo/x
scp -p /lib/terminfo/s/screen-256color somewhere.example.com:.terminfo/s/
scp -p /lib/terminfo/x/xterm-256color somewhere.example.com:.terminfo/x/