Wprowadzenie
Moje pytanie wynika z konieczności zrozumienia, dlaczego mam teraz (po wielu próbach) Terminal i tmux obsługujący 256 kolorów i tput colors
mówiący, że jest ich tylko 8.
tło
Zacznijmy od początku.
Używam Ubuntu box, Guake , tmux , Vim i uwielbiam motyw Solarized . Wyglądały dość okropnie, więc postanowiłem włączyć obsługę 256 kolorów i trochę się pobawić.
Zobaczmy, co się stanie z moim terminalem . tput colors
mówi, że jest 8 kolorów. Osobiście ustawiłem je na fioletowe, po lewej stronie i oczywiście po prawej mamy 2 różne odcienie niebieskiego. $TERM
mówi xterm
. (Aby mieć kolorowe ls
ja eval
to w moim .bashrc
.)
Vim również wygląda dobrze, mimo że nazywam go 256
flagą w środowisku, w którym 256 kolorów nie jest obsługiwanych.
set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized
Jedynym facetem, który narzeka na zmniejszoną przestrzeń kolorów, jest tmux . Wywołanie tmux
zapewnia „złe” oczekiwane wyniki.
Ale dzwonienie tmux
z -2
flagą sprawia, że wszystko działa dobrze, magicznie .
Teraz jedyne, co rozumiem, -2
to odpowiednik export TERM=screen-256color
( źródła ).
Guake zachowuje się analogicznie jak Terminal i obaj odpowiadają xterm
na pytanie echo $TERM
.
Pytanie
Zasadniczo, czy ktoś rozumie, dlaczego wszystko działa, nawet jeśli nie?
- Czy jestem sadystyczny, że narzekam, dlaczego coś działa? Może.
- Czy jest lepszy powód? Jasne: Chciałbym naprawić wygląd innych pudeł Ubuntu w moim biurze i chciałbym zrozumieć, dlaczego coś działa, czy nie.
Dodatkowe eksperymenty
Uruchomienie tego skryptu (nieco zmodyfikowanego) na moim xterm
zapewnia następujący wynik: 256 kolorów, ale tylko 16 jest wyświetlanych poprawnie.
Następnie, zmieniając profil terminala, zmieniają się również te 16 kolorów.
Kolejne testy są następujące.
Od lewej do prawej, od góry do dołu, mamy motyw kolorów Solarized , dircolor
ansi-dark
a 256dark
następnie domyślny schemat kolorów ( Tango ) dircolor
ansi-dark
i 256dark
.
Obserwacja : teoretycznie dircolor
ansi-dark
na solarized kolorystyka powinna mieć Dopasuj bacznie dircolor
256dark
. Nie dzieje się tak wyraźnie w przypadku określonych plików na liście. Zamiast tego dzieje się tak, gdy w katalogu roboczym znajdują się foldery , pliki tekstowe i dowiązania symboliczne . Wniosek : nie zwracano zbytniej uwagi na kodowanie 256dark
kolorów.
Wstępne wnioski
xterm
obsługuje 256 kolorów, pomimo tego tput colors
, co mówi. Programy mogą odwoływać się do ansi
palety (konfigurowalnej przez użytkownika) lub definiować ich kolory, wybierając spośród 256 kolorów.
tput colors
to niewiarygodny test. Czy mógłbyś sprawdzić moje wstępne wnioski ?tput colors
może zwrócić tylko jedną wartość, aw terminalach obsługujących dowolny z 28,16,88 lub 256 kolorów zwracana jest tylko pierwsza wartość (w twoim przypadku 8). Aby uzyskać prawdziwą wartość, użyj skryptu z mojego ostatniego komentarza. Co to zwraca?Odpowiedzi:
Niektóre informacje na temat obsługi 256 kolorów znajdują się w FAQ tmux .
Wykrywanie liczby kolorów obsługiwanych przez terminal nie jest niestety proste z przyczyn historycznych. Zobacz Sprawdzanie, ile kolorów obsługuje mój emulator terminala, aby uzyskać wyjaśnienie. To znaczy że
Kiedy jesteś w tmux, terminalem, z którym współpracujesz, jest tmux. Nie obsługuje wszystkich sekwencji kontrolnych xterm. W szczególności nie obsługuje
OSC 4 ; …
sekwencji sterującej, która pozwala wyszukiwać lub ustawiać wartości kolorów. Musisz użyć tego podczas bezpośredniego działania w Xterm, poza Tmux.Jeśli uruchomisz
tmux -2
, tmux zaczyna się od obsługi 256 kolorów, nawet jeśli nie myśli, że twój terminal obsługuje 256 kolorów (co jest dość powszechne).Domyślnie tmux reklamuje się jako
screen
bez obsługi 256 kolorów. Możesz zmienić wartośćTERM
in,.tmux.conf
aby wskazać obsługę 256 kolorów:Możesz używać
TERM=xterm-256color
lubTERM=screen-256color
na Ubuntu. Te wartości spowodują problemy tylko wtedy, gdy zalogujesz się na zdalnym komputerze, który nie ma wpisu termcap / terminfo dla tych nazw. Możesz skopiować wpisy do katalogu domowego na zdalnym komputerze; działa to z większością nowoczesnych implementacji terminfo.źródło
xterm
mogłem pokazać 256 kolorów, mimo żetput colors
mówiłem 8. Wydaje mi się, że odpowiedź na to konkretne pytanie została rozwiązana przez @terdon w jego komentarzach do samego pytania.set -g default_terminal "screen-256color"
polecenie nie jest wystarczające, aby włączyć 256 kolorów w tmux . Musiszalias tmux='export TERM=screen-256color; /usr/bin/tmux'
( odniesienie ).tmux -2
zgodnie z moim poprzednim akapitem, jeśli tmux nie uważa, że twój obecny terminal obsługuje 256 kolorów, więcalias tmux='tmux -2'
miałoby to sens.TERM=xterm-256color tmux
, co jest rozsądne, w przeciwieństwie doTERM=screen-256color tmux
.tmux -2
jest lepszy, ponieważ działa, nawet jeśliscreen-256color
nie ma go w lokalnej bazie danych terminfo.Jestem pod wrażeniem tego, jak bogato sformatowane i szczegółowe są odpowiedzi (i pytanie!). Dostarczają cennych informacji i rozwiązań na temat narzędzi, o których wspomniałeś, ale zapewniają bardzo niewielki wgląd w to, co się dzieje , i, co najważniejsze, dlaczego (nieco) działają dla niektórych narzędzi, kiedy podobno nie powinny.
Oto kilka spostrzeżeń na temat podstawowych pytań:
To, co obsługuje terminal i co zgłasza, to różne rzeczy. Na przykład terminal Gnome może wyświetlać 256 kolorów, ale ogłasza się w środowisku (poprzez
$TERM
zmienną) jakoxterm
emulator (8 kolorów).Narzędzia takie jak
tput
podążaj za tym, coTERM
jest ustawione na:tput colors
może wypisać 8, aenv TERM=xterm-256color tput colors
wypisać 256, niezależnie od tego, czy twój terminal faktycznie obsługuje takie możliwości.vim
również śledzićTERM
domyślnie, ale jak pan powiedział go użyć 256 kolorów (przez flagą alboset t_Co=256
), używa 256 kolorów. I działa, ponieważ twój terminal faktycznie to obsługuje .tmux
, podobnie jak Gnome Terminal, również domyślnie zgłasza się jako 8-kolorowy terminal. Ale, w przeciwieństwie do Gnome Terminal, włącza funkcję 256 kolorów tylko wtedy, gdy używasz-2
flagi, co sprawia, że zgłasza się jakoxterm-256color
kompatybilny emulator.xterm
, podobnie jak w oprogramowaniu emulatora terminali dla X11 , z pewnością obsługuje 256 kolorów. Alexterm
tak jak wTERM=xterm
8-kolorowym „standardzie”. Oznacza możliwości oryginałuxterm
. Kiedy został zmodernizowany, aby obsługiwać 256 kolorów, dawno temu wymyślił tenxterm-256color
termin.Wszystko sprowadza się do:
Jakie możliwości obsługuje Twój terminal (i jest to możliwe)
Jak zgłasza takie możliwości środowisku za pośrednictwem
TERM
Jak narzędzia odpowiednio interpretują
TERM
i dostosowują się.Jak możesz wywnioskować z powyższego, unikaj wbijania
export TERM=xterm-256color
w swoje~/.bashrc
i takie skrypty . Ponieważ pliki te są wykonywane bez względu na terminal, którego faktycznie używasz, wszystkie twoje terminale, w tym zdalne połączenia z Windows za pomocą Putty, terminal konsoli Linux itp., Zgłaszają się jako zgodne z xterm-256color. Co może być prawdą dla niektórych, ale na pewno nie dla wszystkich. Na przykładgetty
konsola Linux, do której masz dostępCTRL+ALT+1..6
, nie działa.Terminale powinny zgłaszać się jako „standardowe”, z którymi są najbardziej kompatybilne. Jeśli wiesz, że potrafią obsłużyć 256 kolorów, skonfiguruj je tak, aby reklamowały się jako takie.
Wreszcie, niesamowita lektura
TERM
i 256 kolorów to:http://blog.sanctum.geek.nz/term-strings/
http://blog.sanctum.geek.nz/256-colour-terminals/
źródło
Podam uzupełniającą odpowiedź, która dotyczy tylko twoich dodatkowych eksperymentów, o ile odnoszą się one do nasyconych kolorów katalogów .
Ustawiać
Mamy ten sam kolor wyjściowy ze skryptu testowego. Jedyną różnicą jest to, że użyłem
lxterminal
na Openbox z slim , xcompmgr i bez DM. Dlatego nie mogę łatwo ustawić niestandardowej palety tak jak Ty, ponieważ ten emulator terminala nie oferuje tych ustawień w interfejsie GUI i nie ma dla niego określonego motywu (istnieją tylko dla kilku emulatorów terminali). Używam więc tylko półprzezroczystych, nieekorowanych terminali i tego niebieskiego jako koloru pierwszego planu z niebieskim tłem Gentoo . Ponieważ nie mogę używać wersji kolorów plików ansi , skupiłem się wyłącznie na uzyskiwaniu rezultatów,dircolors.256dark
np. W „zdegradowanej” prostej wersji.Użyłem następującej odpowiedniej konfiguracji i średniej czcionki inconsolata :
Dircolors
Poniższy obrazek pokazuje, co dzieje się zarówno w tmuxie , jak i poza nim przy tych ustawieniach. Pierwsza trzecia po lewej stronie pokazuje niezdekorowane okna terminala ułożone pionowo (3). Zeby masz tmux montaż pokazano te same identyczne programy (3) Mam również do solarized
xterm
1 seans nano za pomocą pliku .Xresources zawarte w pełnym pakietem (i pobierania goxrdb -load ~/.Xresources
):proszę kliknąć prawym przyciskiem myszy / wyświetlić obraz, aby sprawdzić w pełnej rozdzielczości
Pierwszy terminal w lewym górnym rogu pokazuje domyślne kolory katalogu. Tuż poniżej znajduje się zdegradowana wersja solarizowana . Z wyjątkiem różowego na niebieskim tle dla
.c
dodanych przeze mnie plików, jest on identyczny z oczekiwanym od tego (patrz zdjęcie poniżej w celach informacyjnych). W porównaniu do wartości domyślnych, opiera się on na rozszerzonych atrybutach, tj. Pogrubieniu / świetle / odwróceniu itp., A kolory są oczywiście różne. Domyślne przypisanie kolorów dla.txt
plików w wielu dystrybucjach jest zielone, ale zamiast tego powinno być szare po nasłonecznieniu . Plik ansi renderujący plik .txt w kolorze zielonym albo nie wyświetla się poprawnie, albo wcale. Pokazane wyniki po prawej stronie są prawidłowe (256dark) w odniesieniu do następującego odniesienia:mapa referencyjna dircolors nasłonecznionych „zdegradowanych”
Spostrzeżenia
Przy zastosowanej konfiguracji wyniki wyglądają identycznie wewnątrz i na zewnątrz tmux (mam odwrócone komentarze (#) w vi, ale poza tym wtyczka zachowuje się tak, jak powinna, a multiplekser nie ma na to wpływu). Czcionki odgrywają ogromną rolę w definicji funkcji solaryzowanych i wymagana jest dobra czcionka, aby zmaksymalizować wrażenia. W solarized kolory katalogu za pomocą 256dark plik odpowiada odwołaniu i nie wymaga żadnej szczególnej konfiguracji emulatora terminala.
Wniosek
W rzeczywistości renderowanie ansi kolorów katalogów jest po prostu zupełnie inne niż zdegradowane słoneczne (256dark). Tak bardzo, że pod ansi
.txt
pliki są zielone. Jednego nie można użyć do sprawdzenia poprawności renderowania drugiego. Oba rozwiązania wymagają innej konfiguracji i dają zupełnie inne wyniki.źródło
ansi-dark
poprawne wyjście (ponieważ używa ono wersji nie degradowanej). Następnie, jeśli weźmiesz jako odniesienie wynik256dark
, to masz odwrócony sposób myślenia.