Úvod
Moje otázka vyplývá z nutnosti pochopit proč Mám teď (po několika pokusech) Terminál a tmux podporuje 256 barev a tput colors
říkám, že jich je jen 8.
Pozadí
Začněme od začátku.
Používám Ubuntu box, Guake , tmux , Vim a líbí se mi téma Solarized . Vypadaly dost příšerně, tak jsem se rozhodl povolit podporu 256 barev a trochu si pohrát.
Uvidíme, co se stane s mým Terminálem . tput colors
říká, že je 8 barev. Osobně jsem je nastavil na fialovou, vlevo a samozřejmě vpravo máme 2 různé odstíny modré. $TERM
říká xterm
. (Chcete-li mít barevný ls
eval
toto v mém .bashrc
.)
Vim také vypadá dobře, i když tomu říkám 256
vlajka v prostředí, kde 256 barev není podporováno.
set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized
Jediný, kdo si stěžuje na zmenšený barevný prostor, je tmux . Volání tmux
poskytuje „špatné“ očekávané výsledky.
Ale volání tmux
pomocí -2
flag zajistí, aby vše fungovalo dobře, magicky .
Teď jediné, čemu rozumím, je -2
je ekvivalentem export TERM=screen-256color
(zdroj).
Guake chová se obdobně jako Terminál a oba odpoví xterm
na otázku echo $TERM
.
Otázka
V zásadě, chápe někdo, proč všechno funguje, i když by nemělo?
- Jsem sadistický, když si stěžuji, proč věci fungují? Možná.
- Existuje lepší důvod? Jistě:Chtěl bych opravit vzhled ostatních boxů Ubuntu ve své kanceláři a rád bych pochopil, proč věci fungují nebo nefungují.
Další experimenty
Spuštění tohoto skriptu (mírně upraveného) na mém xterm
poskytuje následující výsledek:256 barev, ale pouze 16 je zobrazeno správně.
Poté se změnou profilu terminálu změní i těchto 16 barev.
Následují další testy.
Zleva doprava, shora dolů, máme Solarizaci barevný motiv, dircolor
ansi-dark
a 256dark
, poté výchozí (Tango ) barevné schéma, dircolor
ansi-dark
a 256dark
.
Pozor :teoreticky dircolor
ansi-dark
na Solarized barevné schéma by se mělo co nejvíce shodovat s dircolor
256dark
. To se u konkrétních uvedených souborů zjevně neděje. Místo toho se to stává, když jsou v pracovním adresáři složky , textové soubory a symbolické odkazy . Závěr :při kódování 256dark
nebyla věnována žádná velká pozornost barvy.
Předběžné závěry
xterm
podporuje 256 barev, bez ohledu na to, jaké tput colors
říká. Programy mohou odkazovat na ansi
paletu (přizpůsobitelné uživatelem) nebo definovat jejich barvy, přičemž si můžete vybrat z celkem 256 barev.
Přijatá odpověď:
Některé informace o podpoře 256 barev jsou v tmux FAQ.
Související:Seznam shellů, které podporují klíčové slovo `local` pro definování lokálních proměnných?Zjištění počtu barev, které terminál podporuje, bohužel není z historických důvodů jednoduché. Vysvětlení najdete v části Kontrola počtu barev, které můj emulátor terminálu podporuje. To znamená, že
- tmux nemůže spolehlivě určit, zda terminál podporuje více než 8 barev;
- tmux nemůže aplikaci spolehlivě sdělit, že podporuje více než 8 barev.
Když jste v tmux, terminál, se kterým komunikujete, je tmux. Nepodporuje všechny řídicí sekvence xtermu. Zejména nepodporuje OSC 4 ; …
ovládací sekvence pro dotazování nebo nastavení hodnot barev. Musíte to použít při přímém spuštění v xterm, mimo tmux.
Pokud spustíte tmux -2
, pak tmux začne s podporou 256 barev, i když si nemyslí, že váš terminál podporuje 256 barev (což je docela běžné).
Ve výchozím nastavení se tmux inzeruje jako screen
bez podpory 256 barev. Hodnotu TERM
můžete změnit v .tmux.conf
pro označení podpory 256 barev:
set -g default-terminal "screen-256color"
Můžete použít TERM=xterm-256color
nebo TERM=screen-256color
na Ubuntu. Tyto hodnoty způsobí potíže pouze v případě, že se přihlásíte ke vzdálenému počítači, který pro tato jména nemá položku termcap/terminfo. Záznamy můžete zkopírovat do svého domovského adresáře na vzdáleném počítači; to funguje s nejmodernějšími implementacemi terminfo.
# 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/