Sprawdzanie, ile kolorów obsługuje mój emulator terminala


Odpowiedzi:


20

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.


Dzięki @Gilles. To wygląda świetnie. Czy mogę zapytać, co read -d $'\a' -s -t 1robi?
Amelio Vazquez-Reina,

1
@intrpc Czytaj wejście do pierwszego \a(znak dzwonka), bez wprowadzania echa, z limitem czasu 1 sekundy.
Gilles 'SO - przestań być zły'

5
@ l0b0 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.
Gilles 'SO - przestań być zły'

2
@ l0b0 Twoja rura oczywiście nie ma nic wspólnego z terminalem. Musisz wydrukować na terminalu ( printf … >/dev/tty), a następnie odczytać z terminalu ( read … </dev/tty). Xterm reaguje na OSC 4; …; ? BELsekwencję, wprowadzając naciśnięcia klawiszy.
Gilles „SO- przestań być zły”



9

Możesz użyć

$ tput colors

Na mojej instalacji Debiana tput jest częścią ncurses-binpakietu instalowanego domyślnie.


6
Dzięki temu dowiesz się tylko, ile kolorów Twój terminal zgłasza do środowiska TERM, a nie ile kolorów może w rzeczywistości obsłużyć, biorąc pod uwagę odpowiedniTERM
MestreLion
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.