Jestem w trakcie kolorowania terminala PS1
.
Ustawiam zmienne kolorów za pomocą tput
; na przykład tutaj jest fioletowy:
PURPLE=$(tput setaf 125)
Pytanie:
Jak znaleźć kody kolorów (np. 125
) Innych kolorów?
Czy gdzieś jest kolorowy przewodnik po tabelach / ściągawka?
Po prostu nie jestem pewien, co to 125
jest… Czy jest jakiś sposób, aby wziąć kolor heksadecymalny i przekonwertować go na liczbę, której setaf
można użyć?
Odpowiedzi:
Liczba kolorów dostępnych dla tput jest podana przez
tput colors
.Aby zobaczyć podstawowe 8 kolorów (używane przez
setf
w terminalu urxvt isetaf
xterm):I zwykle nazywany tak:
Aby zobaczyć rozszerzone 256 kolorów (używane przez
setaf
w urxvt):Jeśli chcesz liczb i uporządkowanego wyjścia:
16 milionów kolorów wymaga sporo kodu (niektóre konsole tego nie pokazują).
Podstawy to:
fb
jestfront/back
lub3/4
.Prostym testem zdolności konsoli do zaprezentowania tak wielu kolorów jest:
Przedstawi czerwoną linię z bardzo małą zmianą tonu od lewej do prawej. Jeśli ta niewielka zmiana jest widoczna, oznacza to, że Twoja konsola może wyświetlać 16 milionów kolorów.
Każdy
r
,g
ib
jest wartością od 0 do 255 dla RGB (czerwony, zielony, niebieski).Jeśli Twój typ konsoli to obsługuje, ten kod utworzy tabelę kolorów:
Aby przekonwertować wartość koloru szesnastkowego na (najbliższy) indeks kolorów 0-255:
Użyj go jako:
Aby znaleźć numer koloru używany w formacie kolorów HTML :
Użyj go jako („podstawowy” to pierwsze 16 kolorów, „kolor” to główna grupa, „szary” to ostatnie szare kolory):
źródło
fromhex
. Dzięki jeszcze raz! Ponadto, dodaje czek na#
. Informacje zwrotne?hex=${1#"#"}
. Nic nie usunie, jeśli$1
nie ma#
, i usunie go, jeśli istnieje. Zobacz mój zaktualizowany kod.\e[0;%s8;2;%s;%s;%sm
nie daje mi 16 milionów kolorów, tylko kolor z palety 240 kolorów, który jest najbliższy żądanej rgb.Krótka odpowiedź jest taka, że można znaleźć w internetowych tabelach kolorów i dopasować je do numeru koloru.
Długa odpowiedź jest taka, że prawidłowe mapowanie zależy od terminala -
125
Jest parametrem do sekwencji sterującej dalejsetaf
w opisie zaciskowej.tput
nie przywiązuje żadnego szczególnego znaczenia do liczby. To zależy od konkretnego emulatora terminala.Jakiś czas temu ANSI zdefiniowało kody dla 8 kolorów i były dwa schematy ich numerowania. Oba są widoczne w niektórych opisach terminali jako pary
setf/setb
lubsetaf/setab
. Ponieważ ten drugi ma konotację z „kolorami ANSI”, zobaczysz, że jest używany częściej. Ten pierwszy (setf / setb) zmienił kolejność dla koloru czerwonego / niebieskiego, jak podano w FAQ ncurses Dlaczego wymieniono kolor czerwony / niebieski? , ale w obu przypadkach ustanowiono schemat tylko numerowania kolorów. Nie ma predefiniowanego związku między tymi liczbami a treścią RGB.Dla określonych emulatorów terminali istnieją predefiniowane palety kolorów, które można łatwo wyliczyć - i można je zaprogramować za pomocą tych sekwencji ucieczki. Nie ma odpowiednich standardów i zobaczysz różnice między emulatorami terminali, jak zauważono w xterm FAQ Nie podoba mi się ten odcień niebieskiego .
Konwencja jest jednak często mylona ze standardami. Opracowując xterm w ciągu ostatnich 20 lat, wprowadzono kolory ANSI (8), dostosowano kolory
aixterm
funkcji (16), dodano rozszerzenia dla kolorów 88 i 256. Wiele z nich zostało przyjętych przez innych programistów dla różnych emulatorów terminali. Podsumowano to w FAQ Xterm. Dlaczego nie uczynić „xterm” równoznacznym z „xterm-256color”? .Kod źródłowy xterm zawiera skrypty pokazujące kolory, np. Wykorzystujące te same sekwencje specjalne, które
tput
mogłyby zostać użyte.Pomocne może być również to pytanie / odpowiedź: wartości RGB kolorów w rozszerzonym indeksie kolorów Ansi (17–255)
źródło
tput
Narzędzie jest przy użyciu tabeli przeglądowej 256 kolorów do drukowania 8-bitowe sekwencje ANSI ucieczki (poczynając Esci[
), który wykorzystuje możliwości terminala , aby te sekwencje kontrolne mogą być interpretowane jako barwniki. Są to wstępnie zdefiniowany zestaw 256 kolorów używanych powszechnie w kartach graficznych.Aby wydrukować wszystkie 256 kolorów w terminalu, wypróbuj następującą linijkę:
Wskazówka: Dołącz
| column
do listy kolumnowej.Ta 256-kolorowa tabela odnośników znajduje się również na stronie Wikipedii w następujący sposób:
źródło
Z zsh oraz w
xterm
-Jak terminala (xterm
ivte
opartych o terminale, jakgnome-terminal
,xfce4-terminal
... co najmniej), można zrobić:Odpowiednik bash:
(chcesz, aby sekwencja zmiany znaczenia wysłała zapytanie o kolor, który ma zostać wysłany po wyłączeniu dyscypliny terminalowej
echo
(z-s
), w przeciwnym razie odpowiedź byłaby wyświetlana przez dyscyplinę liniową przez połowę czasu, stąd wysłanie jej jako częściread
zachęty (var?prompt
w zsh jak w ksh,-p prompt
w bash)).aby uzyskać definicję koloru 125 (tutaj jako specyfikacja RGB, gdzie każda liczba jest intensywnością składników czerwonego, zielonego i niebieskiego jako liczba szesnastkowa między 0 a FFFF).
Możesz zrobić to samo dla pierwszych 16 kolorów za pomocą
xtermcontrol
polecenia:źródło
tput colors
raporty tylko,8
jeśli terminal jest w stanie przedstawić 256 kolorów. Ponadto xterm-color (Konsole)tput colors
zgłasza tylko,8
nawet jeśli terminal jest w pełni zdolny do przedstawienia 16 milionów kolorów (i oczywiście wszystkich 256 kolorów). I nie, nie ma tmuxa ani ekranu, który może „pokolorować” :-) (to znaczy zmienić) wyniki (byłem świadomy tego szczegółu). W skrócie: Twój kod może zawieść w niektórych terminalach / konsolach.Kolory ANSI na termin konsoli
W zależności od protokołu, którego używa konsola, sekwencja może być:
\e[38;5;XXXm
lub\e[3XXXm
gdzieXXX
odpowiada numerowi ansi.Aby upewnić się, że używasz właściwej sekwencji ANSI, musisz użyć
tput
.W odniesieniu do kodu ucieczkowego ANSI Wikipedii napisałem to:
Może renderować coś takiego:
... Następnie, ponieważ nienawidzę uruchamiania ponad 200 widelców w małym skrypcie, napisałem to:
Z tylko 1 widelcem! Ten sam wynik, ale o wiele szybciej!
źródło