Czy istnieje niezawodny sposób sprawdzenia, ile kolorów obsługuje mój emulator terminala?
Jeśli echo $TERMdrukuje xterm, czy to jednoznacznie mówi mi, ile kolorów obsługuje mój emulator terminala? Jak mogę niezawodnie sprawdzić te informacje?
Czy istnieje niezawodny sposób sprawdzenia, ile kolorów obsługuje mój emulator terminala?
Jeśli echo $TERMdrukuje xterm, czy to jednoznacznie mówi mi, ile kolorów obsługuje mój emulator terminala? Jak mogę niezawodnie sprawdzić te informacje?
Odpowiedzi:
Wartość $TERMnie podaje zbyt wielu informacji o liczbie obsługiwanych kolorów. Wiele terminali reklamuje się jako xtermi może obsługiwać dowolną liczbę kolorów (2, 8, 16, 88 i 256 to wspólne wartości).
Możesz sprawdzić wartość każdego koloru za OSC 4 ; c ; ? BEL pomocą sekwencji kontrolnej . Jeśli numer koloru cjest obsługiwany i jeśli terminal zrozumie tę sekwencję sterowania, terminal odpowie z wartością koloru. Jeśli numer koloru nie jest obsługiwany lub terminal nie rozumie tej sekwencji kontrolnej, terminal nic nie odpowiada. Oto fragment bash / zsh służący do sprawdzenia, czy kolor 42 jest obsługiwany (w razie potrzeby przekieruj do / z terminala):
printf '\e]4;%d;?\a' 42
if read -d $'\a' -s -t 1; then … # color 42 is supported
Wśród popularnych terminali, xterm i terminale oparte na bibliotece VTE (Gnome-terminal, Terminator, Xfce4-terminal,…) obsługują tę sekwencję kontrolną; rxvt, konsola, screen i tmux nie.
Nie znam bardziej bezpośredniego sposobu.
read -d $'\a' -s -t 1robi?
\a(znak dzwonka), bez wprowadzania echa, z limitem czasu 1 sekundy.
tput colorsodpytuje bazę danych terminfo. Są szanse, że masz TERM=xterm. Xterm może obsługiwać co najmniej 2, 8, 16, 88 lub 256 kolorów w zależności od wersji oraz opcji kompilacji i wykonania, ale baza danych terminfo może przechowywać tylko jedną wartość. Możesz ustawić np. TERM=xterm+256color, Ale wtedy będziesz zirytowany, gdy zalogujesz się na maszynie, która nie ma tego wpisu w swojej bazie danych termcap / terminfo.
printf … >/dev/tty), a następnie odczytać z terminalu ( read … </dev/tty). Xterm reaguje na OSC 4; …; ? BELsekwencję, wprowadzając naciśnięcia klawiszy.
Istnieje skrypt perla, 256colors2.pl , który wyświetli wszystkie kolory na twoim terminalu.
Możesz użyć
$ tput colors
Na mojej instalacji Debiana tput jest częścią ncurses-binpakietu instalowanego domyślnie.
TERM, a nie ile kolorów może w rzeczywistości obsłużyć, biorąc pod uwagę odpowiedniTERM