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/