tmux, TERM ve 256 renk desteği


48

Giriş

Benim sorum şu anda neden olduğumu anlama zorunluluğudur (birkaç denemeden sonra) Terminal ve tmux 256 rengi destekliyor ve bana sadece 8 tane olduğunu söylüyor.tput colors


Arka fon

Hadi baştan başlayalım.

Bir Ubuntu kutusu kullanıyorum , Guake , tmux , Vim ve Solarized temasını seviyorum . Oldukça berbat görünüyorlardı, bu yüzden 256 renk desteğini etkinleştirmeye ve etrafta biraz oynamaya karar verdim.

Terminalim için ne olacağını görelim . tput colors8 renk olduğunu söylüyor. Ben şahsen onları mor renkte, solda ve elbette sağda 2 farklı mavi tonumuz var. $TERMdiyor ki xterm. (Renkli olanı benim lsiçimde eval bu.bashrc )

görüntü tanımını buraya girin

Vim ayrıca Birlikte diyoruz olmasına rağmen cezayı görünüyor 256256 renk bir ortamda bayrak değil destekledi.

set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized

Renk boşluğundan şikayetçi olan tek kişi tmux . Arama tmux"yanlış" beklenen sonuçları verir.

görüntü tanımını buraya girin

Ama çağıran tmuxile -2bayrak, her şey iyi çalışır hale getirir sihirli .

görüntü tanımını buraya girin

Şimdi anladığım tek şey -2şunun eşdeğeri export TERM=screen-256color( kaynak ).

Guake , Terminal'e benzer şekilde davranır ve her ikisi xtermde soruyu cevaplar echo $TERM.


Soru

Temel olarak, her şey neden olmasa bile her şeyin neden çalıştığını anladı mı?

  • İşlerin neden işe yaradığından şikayet ettiğim için üzgün müyüm? Olabilir.
  • Daha iyi bir sebep var mı? Tabii: Ofisimdeki diğer Ubuntu kutularının görünümünü düzeltmek istiyorum ve işlerin neden işe yarayıp yaramadığını anlamak istiyorum.

Ek deneyler

Bu betiği (biraz değiştirilmiş) benim üzerinde çalıştırmak xtermaşağıdaki sonucu veriyor: 256 renk, ancak yalnızca 16 doğru görüntüleniyor.

görüntü tanımını buraya girin

Ardından, terminalin profilini değiştirirken, bu 16 renk de değişir.

görüntü tanımını buraya girin

Daha fazla test takip ediyor.

Soldan sağa, yukarıdan aşağıya, Solarized color temamızdircolor ansi-dark ve 256darksonra varsayılan ( Tango ) renk düzenimiz var dircolor ansi-darkve 256dark.

görüntü tanımını buraya girin

Gözlem : Teoride dircolor ansi-darküzerine solarized renk düzeni maçı yakından olmalıdır dircolor 256dark. Bu, listelenen belirli dosyalar için açıkça gerçekleşmiyor. Bunun yerine, bu oldukça çalışma dizinde klasörler , metin dosyaları ve sembolik bağlantılar olduğunda olur . Sonuç : 256darkrenkleri kodlarken fazla dikkat edilmemiştir .


Ön sonuçlar

xtermtput colorssöylediğine rağmen 256 rengi destekliyor . Programlar, ansitoplam 256 renk arasından seçim yaparak palete başvurabilir (kullanıcı tarafından özelleştirilebilir) veya renklerini tanımlayabilir.


1
Bu cevabı ve altındaki yorumları okuyun . Soruna cevap veriyor mu? Ayrıca, desteklenen gerçek renk sayısını elde etmek için bu komut dosyasına bir göz atın .
terdon

Hum ... Hala biraz kafam karıştı ... Ama sanırım en azından bunun tput colorsgüvenilmez bir test olduğunu anlıyorum . Ön sonuçlarımı kontrol eder misiniz ?
Atcold

2
Gille'in cevabını okudum tput colors, yalnızca bir değer verebilecek ve 2,8,16,88 veya 256 renkten herhangi birini destekleyen terminallerde, yalnızca ilk değer (sizin durumunuzda 8) verilecek. Gerçek değeri elde etmek için son yorumumdan betiği kullan. Bu ne işe yarıyor?
terdon

Benim Kontrol Ek deneyler :) yukarıda
Atcold

Ah, özür dilerim, benim hatam.
terdon

Yanıtlar:


33

Tmux SSS bölümünde 256 renk desteği hakkında bazı bilgiler var .

Terminalin desteklediği renk sayısının tespiti, ne yazık ki, tarihsel nedenlerden ötürü açık değildir. Bir açıklama için Terminal emülatörümün kaç rengi desteklediğini kontrol etme bölümüne bakın . Bu şu demek

  • tmux, terminalin 8'den fazla rengi destekleyip desteklemediğini güvenilir bir şekilde belirleyemiyor;
  • tmux, 8'den fazla rengi desteklediği uygulamaya güvenilir şekilde iletişim kuramıyor.

Tmux'dayken, etkileşim kurduğun terminal tmux'dur. Tüm xterm kontrol dizilerini desteklemiyor. Özellikle, OSC 4 ; …renk değerlerini sorgulamak veya ayarlamak için kontrol sırasını desteklemiyor . Bunu doğrudan xterm içinde çalışırken, tmux dışında kullanmanız gerekir.

Eğer tmux -2koşarsanız, terminalinizin 256 rengi desteklediğini düşünmese bile, tmux 256 renk desteğiyle başlar (oldukça yaygındır).

Varsayılan olarak, tmux screen256 renk desteği olmadan kendini tanıtır . 256 renkli desteği belirtmek için TERMin değerini değiştirebilirsiniz .tmux.conf:

set -g default-terminal "screen-256color"

Ubuntu’da TERM=xterm-256colorveya TERM=screen-256colorüzerinde kullanabilirsiniz . Bu değerler yalnızca bu adlar için bir termcap / terminfo girişi olmayan bir uzak makineye giriş yaparsanız sorun çıkarır. Girişleri uzaktaki makinedeki ana dizine kopyalayabilirsiniz; Bu en modern terminfo uygulamaları ile çalışır.

# 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/

Açıklamayı takdir ediyorum, ancak sorumu hedeflediğinden emin değilim. Pekala, sorumun oldukça geniş olduğuna katılıyorum, ancak özellikle tmux'a odaklanmadım . Aslında, tmux beklentiye göre davranan tek kişiydi. Çok daha esrarengiz olanı , 8 dediği xtermhalde bana 256 renk gösterebilmekti tput colors. Bu özel sorunun cevabını, soruya yaptığı açıklamada @ terdon tarafından ele aldım .
Atcold

@Atcold Bu uzun bir soru, ancak söyleyebileceğim kadarıyla cevap verdim. Smokin ile ilgili olmayan kısımlar, terdon ve benim bağlantıda bulunduğum (ve yazdığım) cevaplarla kaplıdır. Sorunuz tmux yönü için olmasaydı, bunun bir kopyası olurdu. Bir cevaptan daha ne bekliyordun?
Gilles 'SO- kötülük' dur

1
@Gilles , kulağa kötü gelmek istemedim. Cevabınızı başka bir soruya atıfta bulunsa bile, "kabul edilen cevap" konusunu @terdon'a akredite etmeye çalışıyordum . Buna rağmen, set -g default_terminal "screen-256color"komut tmux'da 256 rengi etkinleştirmek için yeterli değil . Yapmanız gerekir alias tmux='export TERM=screen-256color; /usr/bin/tmux'( başvuru ).
Atcold

@Atcold Hayır, takma ad gerekli değil (test ettim). Üstelik bu takma ad bir anlam ifade etmiyor: tmux'un ekranda veya tmux'da çalıştığını iddia ediyor. Bununla birlikte, tmux -2eğer tmux mevcut terminalinizin 256 rengi desteklediğini düşünmüyorsa, önceki paragrafıma göre çalışmanız gerekir , bu yüzden alias tmux='tmux -2'mantıklı olacaktır.
Gilles 'SO- kötülük' dur

2
@Atcold U&L cevabının TERM=xterm-256color tmux, aksine, mantıklı olan vardır TERM=screen-256color tmux. Yerel terminfo veritabanında olmasa tmux -2bile çalışır çünkü üstündür screen-256color.
Gilles 'SO- kötülük' dur

20

Cevapların (ve sorununun!) Ne kadar zengin bir biçimde biçimlendirilip ayrıntılandırıldığından etkilendim. Bahsettiğiniz araçlar hakkında değerli bilgiler ve çözümler sunsalar da, haltların neler olduğu hakkında çok az fikir sahibi olurlar ve en önemlisi, işlerin neden bazı araçlar için sözde yapmamaları gerektiğine (biraz) çalıştıkları hakkında çok az bilgi sağlarlar .

İşte temel sorularınızla ilgili bazı görüşler:

  • Bir terminalin desteklediği ve rapor ettiği şey farklı şeylerdir. Örneğin Gnome terminal sahip 256 renk monitör, ancak açıkladı (aracılığıyla ortama kendini $TERMbir değişkenin) xtermemülatörü (8 renk).

  • Gibi araçlar tputne TERMayarlanmışsa izleyin : tput colors8 yazdırabilir, ancak env TERM=xterm-256color tput colorsterminaliniz gerçekten bu özellikleri destekliyorsa , 256 yazdırabilir .

  • vimAyrıca izleyin TERM, varsayılan olarak, ancak siz (bayrak veya üzeri 256 renk kullanmak söyledim set t_Co=256), bu 256 renk kullanır. Ve çalışıyor çünkü terminaliniz bunu destekliyor .

  • tmuxTıpkı Gnome Terminali gibi, varsayılan olarak kendisini 8 renkli terminal olarak bildirir. Ancak, Gnome Terminalinden farklı olarak , bayrak kullanırsanız yalnızca 256 renk özelliğini etkinleştirir-2 , bu da kendisini uyumlu bir emülatör olarak bildirmesini sağlarxterm-256color .

  • xtermX11'in terminal emülatör yazılımında olduğu gibi , elbette 256 rengi destekliyor. Ama xtermolduğu gibi TERM=xterm8 renkli "standart" dır. Orijinalin yetenekleri anlamına gelir xterm. 256 rengi destekleyecek şekilde yükseltildiğinde, uzun zaman önce, bunun terimini kullandı xterm-256color.

Yani hepsi aşağı geliyor:

  • Terminalinizin gerçekte ne gibi yeteneklerini desteklediği (ve bunu yapabildiği takdirde)

  • Bu yetenekleri çevreye nasıl bildirir? TERM

  • Aletlerin TERMkendilerini nasıl yorumladıkları ve ayarladıkları.

  • Yukarıdakilerden çıkartabileceğiniz gibi, sizin ve bu gibi komut dosyalarına çarpmaktan kaçınınexport TERM=xterm-256color~/.bashrc . Bu dosyalar aslında kullandığınız ne olursa olsun, terminal içinde yürütülür gibi, yapacak tüm vb Macun, Linux konsol terminali, Windows uzak bağlantıları da dahil olmak üzere terminalleri, xterm'den-256color uyumlu olarak kendilerini bildirin. Bazıları için doğru olan ama kesinlikle herkes için doğru olmayabilir. Örneğin, gettyeriştiğiniz linux konsolu CTRL+ALT+1..6yok.

  • Terminaller kendilerini en uyumlu oldukları standart olarak bildirmelidir. 256 rengi işleyebileceklerini biliyorsanız, onları reklam verecek şekilde yapılandırın.

Son fakat en az olmayan, TERM256 renk hakkında inanılmaz bir okuma :

http://blog.sanctum.geek.nz/term-strings/

http://blog.sanctum.geek.nz/256-colour-terminals/


Bir veya iki örnek senaryo bu cevaba iyi katkılar sağlayacaktır.
Elijah Lynn

5

Solarize edilmiş dizin renkleriyle ilgili olarak sadece ek deneylerinizi ele alan tamamlayıcı bir cevap vereceğim .

Kurmak

Test betiğinden aynı renk çıktısına sahibiz. Tek fark, kullanılan olduğu lxterminalilgili Openbox ile ince , xcompmgr ve hiçbir DM. Bu nedenle, sizin gibi özel bir paleti kolayca ayarlayamıyorum, çünkü terminal emülatörü bu ayarları bir GUI'de sunmuyor ve bunun için özel bir tema yok (sadece birkaç terminal emülatörü için var). Bu yüzden sadece biraz saydamlık, bezemesiz terminaller ve bu maviyi mavi bir Gentoo geçmişi olan ön plan rengi olarak kullanıyorum . Renk dosyalarının ansi sürümlerini kullanamadığım için , yalnızca dircolors.256dark"bozulmuş" basit sürümle sonuç almaya odaklandım .

Aşağıdaki ilgili konfigürasyonu ve inconsolata medium fontunu kullandım:

echo $TERM
xterm

.bashrc:
eval `dircolors /path/to/dircolors.256dark`

.vimrc:
set t_Co=256
let g:solarized_termcolors=256
syntax enable
set background=dark
colorscheme solarized

.tmux.conf:
nothing at all related to colors!
start tmux with "tmux -2"

dircolors

Aşağıdaki resim , bu ayarlarla tmux’un içinde ve dışında neler olduğunu göstermektedir . Soldan ilk üçte, dikey olarak istiflenmiş bezemesiz lxterminal pencereler gösterilir (3). Sağ tarafta aynı programları gösteren bir tmux grubunuz var (3) Ayrıca tam pakette bulunan .Xresources dosyasını (ve örneklemesini kullanarak) kullanarak nano gösteren solarize xterm1'i de ekledim :xrdb -load ~/.Xresources

görüntü tanımını buraya girin tam çözünürlükte incelemek için sağ tıklayın / görüntüyü lütfen

Sol üst köşedeki ilk terminal, varsayılan dizin renklerini gösterir. Hemen aşağıda bozulmuş solarized versiyon var. .cEklediğim dosyalar için mavi arka plandaki pembe dışında , bundan beklenenin aynısıdır (referans için aşağıdaki resme bakın). Varsayılan değerlerle karşılaştırıldığında, genişletilmiş özelliklerden yani koyu / açık / ters vb. Üzerine daha fazla geliştirir ve renkler açıkça farklıdır. .txtPek çok dağıtımdaki dosyalar için varsayılan renk ataması yeşildir, ancak solarize edildiğinde bunun gri olması gerekir . Bir ansi yeşili gibi bir .txt dosyası oluşturma dosya ya hiç render doğru ya da değil render değildir. Gösterdiğiniz sağ taraftaki sonuçlar, aşağıdaki referansla ilgili doğru sonuçtur (256dark):

görüntü tanımını buraya girin solarized "bozulmuş" dircolors referans haritası

Gözlemler

Kullandığım konfigürasyonla , sonuçlar tmux'un içinde ve dışında aynı görünüyor (vi (de) yorumlarını tersine çevirdim (aksi halde eklenti olması gerektiği gibi davranıyor ve çoklayıcı bunun üzerinde bir etkisi yok). Yazı tipleri, solarize edilmiş özellikler tanımında büyük bir rol oynar ve deneyimi en üst düzeye çıkarmak için iyi bir yazı tipi gerekir. Solarized kullanarak dizin renk 256dark dosya referansını eşleşen ve özel bir terminal emülatörü yapılandırma gerektirir.


Sonuç

Aslında, dizin renklerinin ansi sunumu , bozulmuş solarize (256dark) 'ten tamamen farklıdır . Öyle ki ansi .txt dosyalarının altında yeşil. Biri diğerinin sırasını doğrulamak için kullanılamaz. Her iki çözüm de farklı konfigürasyona ihtiyaç duyar ve tamamen farklı sonuçlar verir.


"256dark kodlamasına çok fazla dikkat edilmediğine dair sonucunuzu anlamıyorum, aslında solarize edilmiş bir dizin listesi veren tek renkli dosya burası mı?" Kafamın kargaşası ansi-dark, doğru çıktı olarak düşündüğümden kaynaklanıyor (bozulmamış versiyonu kullandığı için). Sonra, çıktısını referans 256darkalırsanız, tersine çevrilmiş zihniyetiniz vardır.
Atcold

"Kullandığım konfigürasyonla, sonuçlar tmux'un içinde ve dışında aynı görünüyor" Tabii, 256 renk kullanıyorsanız, tabii ki, 256 renk desteğinin olduğu her yerde aynı şekilde işleyecektir. “Ansi çözümünün bu bağlamda daha fazla ne sağlayacağı belli değil ...” Sonuç, doğru bir şekilde Solarize edilmiş olacaktı (bir yaklaşım yerine).
Atcold

Anlıyorum. Ansi bölümünü gerçekten araştırmadım, o yüzden nereden geldiğini anlayamadım. Her durumda, Q'nuzun size teşekkür etmesini sağlarken buldum Belki şimdi daha çok lol kullanacağım için daha çok kullanırım. Ansi sonuçlarına gelince, aslında şimdi nasıl göründüğünü gördüm ... sadece burada dir-renkler için bunu gösteriyorlar . Neden h. Bunun altında farklı kodlamalar var mı… demek istediğim .txt green… gri yeşile yakın nasıl? Projelerini ciddiye almıyorum.

Evet, yazarla kişisel olarak bağlantıya geçtim ve cevabı "o, bu şekilde sevdiği için kişisel kişiselleştirmesi" idi. Ben
suskunum ... Q'm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.