Überprüfen, wie viele Farben mein Terminal-Emulator unterstützt

21

Gibt es eine zuverlässige Möglichkeit, um zu überprüfen, wie viele Farben mein Terminal-Emulator unterstützt?

Wenn echo $TERMgedruckt xtermwird, sagt mir das eindeutig , wie viele Farben mein Terminal-Emulator unterstützt? Wie könnte ich diese Informationen zuverlässig überprüfen?

Amelio Vazquez-Reina
quelle

Antworten:

20

Der Wert von $TERMgibt nicht viele Informationen über die Anzahl der unterstützten Farben. Viele Terminals geben an xterm, dass sie eine beliebige Anzahl von Farben unterstützen (2, 8, 16, 88 und 256 sind gemeinsame Werte).

Sie können den Wert jeder Farbe mit der OSC 4 ; c ; ? BEL Kontrollsequenz abfragen . Wenn die Farbnummer cunterstützt wird und das Terminal diese Steuerungssequenz versteht, antwortet das Terminal mit dem Wert der Farbe. Wenn die Farbnummer nicht unterstützt wird oder das Terminal diese Steuerungssequenz nicht versteht, antwortet das Terminal nicht. Hier ist ein Bash / Zsh-Snippet, mit dem abgefragt wird, ob Farbe 42 unterstützt wird (ggf. Weiterleitung zum / vom Terminal):

printf '\e]4;%d;?\a' 42
if read -d $'\a' -s -t 1; then … # color 42 is supported

Unter den gängigen Terminals unterstützen xterm und Terminals, die auf der VTE-Bibliothek basieren (Gnome-Terminal, Terminator, Xfce4-Terminal,…), diese Steuerungssequenz. rxvt, konsole, screen und tmux nicht.

Ich kenne keinen direkteren Weg.

Gilles 'SO - hör auf böse zu sein'
quelle
Vielen Dank an Gilles. Das sieht gut aus. Darf ich fragen was read -d $'\a' -s -t 1macht
Amelio Vazquez-Reina
1
@intrpc Liest die Eingabe bis zum ersten \a(Klingelzeichen) ohne Echoeingabe mit einer Zeitüberschreitung von 1 Sekunde.
Gilles 'SO- hör auf böse zu sein'
5
@ l0b0 tput colorsfragt die terminfo-Datenbank ab. Die Chancen stehen gut, dass Sie haben TERM=xterm. Xterm unterstützt je nach Version und Kompilierungs- und Laufzeitoptionen mindestens 2, 8, 16, 88 oder 256 Farben, die terminfo-Datenbank kann jedoch nur einen Wert speichern. Sie können z. B. festlegen TERM=xterm+256color, aber dann ärgern Sie sich, wenn Sie sich bei einem Computer anmelden, dessen termcap / terminfo-Datenbank diesen Eintrag nicht enthält.
Gilles 'SO- hör auf böse zu sein'
2
@ l0b0 Deine Pipe hat offensichtlich nichts mit dem Terminal zu tun. Sie müssen zum Terminal drucken ( printf … >/dev/tty) und dann vom Terminal lesen ( read … </dev/tty). Xterm reagiert auf die OSC 4; …; ? BELSequenz mit Tastatureingaben.
Gilles 'SO- hör auf böse zu sein'
9

Sie können verwenden

$ tput colors

Auf meiner Debian-Installation ist tput Teil des ncurses-binPakets, das standardmäßig installiert ist.

Victor Klos
quelle
6
Das wird nur darüber informieren , wie viele Farben Ihr Terminal wird die Berichterstattung über für die Umwelt TERM, nicht , wie viele Farben kann es tatsächlich unterstützen eine entsprechende gegebenTERM
MestreLion