Czy istnieje niezawodny sposób sprawdzenia, ile kolorów obsługuje mój emulator terminala?
Jeśli echo $TERM
drukuje 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 $TERM
drukuje xterm
, czy to jednoznacznie mówi mi, ile kolorów obsługuje mój emulator terminala? Jak mogę niezawodnie sprawdzić te informacje?
Odpowiedzi:
Wartość $TERM
nie podaje zbyt wielu informacji o liczbie obsługiwanych kolorów. Wiele terminali reklamuje się jako xterm
i 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 c
jest 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 1
robi?
\a
(znak dzwonka), bez wprowadzania echa, z limitem czasu 1 sekundy.
tput colors
odpytuje 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; …; ? BEL
sekwencję, 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-bin
pakietu instalowanego domyślnie.
TERM
, a nie ile kolorów może w rzeczywistości obsłużyć, biorąc pod uwagę odpowiedniTERM