Ich möchte wissen, ob es eine Möglichkeit gibt, zu überprüfen, ob mein Programm Terminalausgaben mit Farben ausgeben kann oder nicht.
Wenn Sie Befehle wie ausführen less
und die Ausgabe eines Programms betrachten, das mit Farben ausgibt, wird die Ausgabe wie falsch angezeigt
[ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m]
Vielen Dank
Antworten:
In welcher Sprache verfassen Sie Ihre Bewerbung?
Der normale Ansatz besteht darin, zu überprüfen, ob das Ausgabegerät ein tty ist, und zu überprüfen, ob dieser Terminaltyp Farben unterstützt.
In
bash
, sieht das wäre wieIn C müssen Sie viel mehr tippen , können aber mit isatty und den in aufgeführten Funktionen dasselbe Ergebnis erzielen
man 3 terminfo
.quelle
Das sollte reichen:
tput Farben erklärt:
Wenn Sie sich die Manpage ansehen, werden Sie Folgendes bemerken:
Und...
Das Termcap
colors
befindet sich in der terminfo-Datenbank, daher können Sie danach fragen. Wenn Sie einen Exit-Status von Null haben, wird das Termcap in kompiliert. Wenn Sie jedoch Folgendes haben:Dies zeigt, dass es keine Unknowntermcap gibt. Also das:
Zeigt an, dass Ihr Befehl richtig war.
Andere nützliche Möglichkeiten:
Prost
quelle
colors
ist nicht in dertput
Manpage (!) dokumentiert , sollte ich also nach einer Zahl> = 8 in stdout oder einem Rückkehrcode von 0 suchen?colors
Fähigkeit ist in terminfo (5) dokumentiert . Tests mittput -T dumb colors
,tput -T vt220 colors
,tput -T linux colors
,tput -T xterm colors
deutet darauf hin , gemeinsame Werte sind-1
(keine Farbunterstützung) und8
(8 Farben). Beachten Sie, dass dies nur gilt, wenn überprüft wurde, ob das Ausgabegerät ein Terminal ist (z . B.[ -t 1 ]
oderisatty
).tput colors
zurückgegeben wird, was die lokale Terminaldatenbank vom Terminal hält. Dies kann oder kann nicht dem entsprechen, was das Terminal tatsächlich kann, insbesondere für einen Terminaltyp,xterm
der in vielen Varianten (von Schwarzweiß bis 256 Farben) erhältlich ist.In diesem Anwendungsfall verwenden Programme (z. B. GNU ls oder GNU grep
--color=auto
) normalerweise Farben, wenn ihre Ausgabe an ein Terminal gesendet wird, und keine Farben, wenn sie nicht ausgegeben werden. Terminals, die keine ANSI-Farbänderungssequenzen unterstützen, sind selten genug, um zuzulassen, dass ihre Benutzer die Standardauswahl überschreiben. Stellen Sie in jedem Fall sicher, dass in Ihrer Anwendung die Option zum Aktivieren oder Deaktivieren von Farben verfügbar ist.[ -t 1 ]
Testen Sie in einem Shell-Skript, ob es sich bei der Standardausgabe um ein Terminal handelt.Rufen Sie in einem Programm, das die C-API verwendet, auf
isatty(1)
.quelle
Versuchen Sie es mit
less --RAW-CONTROL-CHARS
.In diesem Beispiel verwende ich logtool , das die Ausgabe mit Farben druckt.
Ohne --ZIEHEN-KONTROLL-CHARS:
Mit --RAW-CONTROL-CHAR (Stellen Sie sich vor, dies ist in hübschen Farben. Außerdem bin ich mir nicht sicher, warum das
^G
angezeigt wird.):quelle
Das wäre der Fehler
less
, dass ANSI-Escapes nicht interpretiert werden; schau nachR
in$LESSOPTS
. Um festzustellen, ob das System weiß, dass Ihr Terminal mit Farben umgehen kann,tput colors
wird entweder die Anzahl der unterstützten Farben ausgegeben oder-1
ob es keine Farben unterstützt. (Beachten Sie, dass einige Terminals möglicherweisexterm
anstelle derxterm-color
Terminalbeschreibung verwenden, aber weiterhin Farben unterstützen.)quelle
Wenn Sie der Ausgabe Farbe hinzufügen möchten, aber nur, wenn Farben unterstützt werden, können Sie einfach verwenden
tput
. http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.htmlquelle