Ich weiß, dass man, wenn ein farbiges Terminal verfügbar ist, die Ausgabe mit Escape-Zeichen einfärben kann .
Aber gibt es eine Möglichkeit herauszufinden, in welcher Farbe die Ausgabe aktuell angezeigt wird? Oder besser, welche Farbe hätte der Text, wenn ich ihn jetzt ausgeben würde?
Ich bitte Sie, bei Verwendung dieser Escape-Zeichen keine vorherigen Farbeinstellungen zu ändern. Das Escape-Zeichen "Standardvordergrundfarbe" bezieht seine Informationen aus dem Farbschema und nicht aus der Textfarbe, bevor ich sie geändert habe.
colors
console
escape-characters
Minix
quelle
quelle
echotc Co
oder unterstütztechoti colors
, aber es gibt einfach keine Variable, in der die aktuelle Farbcodedefinition gespeichert ist.Antworten:
Im Allgemeinen ist es nicht möglich, die aktuellen Farben zu erhalten. Die Ablaufsteuerung eines Terminals erfolgt "innerhalb" des Terminals, wo immer sich das gerade befindet. Mit einem Terminal - Emulator wie
xterm
oder einem in einen Betriebssystemkern aufgebaut , dass der Kernel virtuelles Terminals bereitstellt, den internen Zustand des Emulators, einschließlich seiner Vorstellung von dem aktuellen „Darstellungsart“ (dh Farbe und Eigenschaften), ist an der Maschine selbst und ist theoretisch zugänglich. Bei einem realen Terminal befinden sich diese Informationen jedoch an einem bestimmten RAM-Speicherort auf einem physisch getrennten Computer, der über eine serielle Verbindung verbunden ist.Das heißt, einige Terminals enthalten einen Mechanismus zum Auslesen solcher Informationen als Teil ihres Terminalprotokolls, das über diese serielle Verbindung gesendet wird. Sie bieten Kontrollsequenzen , die ein Programm an das Endgerät senden kann, dass es Grund zu zurücks Informationen über seinen internen Zustand, als Terminal - Eingang.
mikeserv
hat Ihnen die Steuersequenzen gezeigt, auf die derxterm
Terminalemulator reagiert. Aber diese sind spezifisch fürxterm
. Die im Linux-Kernel integrierten Terminal-Emulatoren und die verschiedenen BSD-Kernel sind beispielsweise unterschiedliche Terminaltypen und implementieren überhaupt keine derartigen Steuersequenzen. Gleiches gilt für ganze Familien von realen Terminals.DEC VT525-Terminals implementieren einen Auslesemechanismus, verfügen jedoch über eine Reihe von Steuersequenzen, die in keiner Beziehung zu den von verwendeten Sequenzen stehen
xterm
. Man sendet die DECRQSS-Sequenz (Request Selection or Setting), um die aktuelle Grafikwiedergabe anzufordern, und das Terminal antwortet mit dem Senden der DECRPSS-Sequenz (Report Selection or Setting). Speziell:$
q
m
ST (DECRQSS mit dem Steuerfunktionsteil von SGR als Einstellung)0
$
r
0
;
3
3
;
4
4
m
ST (DECRPSS mit den Parametern und Steuerfunktionen einer SGR-Steuersequenz, die die aktuellen Vordergrund- und Hintergrundfarben festlegt)Natürlich zeigt eine sorgfältige Lektüre Ihrer Frage, dass Sie in diesen europäischen Währungssystemen wieder mit einer Banane mit Schokoladenüberzug winken. Was Sie tatsächlich versuchen, für das Sie eine Lösung ausgewählt und dann gefragt haben, wie Sie einen Teil dieser Lösung ausführen möchten , ist , den vorherigen Status beizubehalten, während Sie eine farbige Ausgabe schreiben. Dazu gibt es nicht nur eine DEC VT-Steuersequenz, sondern auch eine SCO-Konsolenterminalsequenz, die von
xterm
verschiedenen im Kernel integrierten Terminalemulatoren erkannt wird , und einen Eintrag termcap / terminfo, der angibt, was sie für Ihr Terminal sind.Die termcap-Einträge sind
sc
undrc
. Die Terminfo-Einträge sindsave_cursor
undrestore_cursor
. Die Namen sind in ihrer Wirkung etwas irreführend (obwohl sie als Warnung dienen, dass Sie sich auf etwas verlassen, das de facto und nicht de jure ist ). Die tatsächlichen Steuersequenzen DECSC, DECRC, SCOSC und SCORC speichern und stellen auch die aktuelle Grafikwiedergabe wieder her.In dem Artikel, auf den Sie verwiesen haben, geht es darum, Steuersequenzen aus Shell-Skripten zu generieren. Der Befehl, nach dem Sie jetzt suchen, lautet
tput
:Weitere Lektüre
quelle
sc
undrc
möchten Sie möglicherweise auch in den alternativen Puffer schauen, wenn Ihr Terminal dies unterstützt. Und ja, das ist eine großartige Antwort. Minix, vielleicht auch so aussehen: wie Sie mit / dev / fb0 als Konsole von Anwenderseite . Dienosh
Suite, die er empfiehlt, ist seine eigene.DECRQSS
(etwa 7 Jahre verzögern ...).In
xterm
können Sie die aktuellen RGB-Farbcodes abrufen, indem Sie ein Farbänderungs-Escape in eine Abfrage ändern. Verwenden Sie dasESC ] Ps m
-, aber fügen Sie ein?
Fragezeichen hinzu. Aus den Dokumenten :"?"
anstelle eines Namens oder einer RGB-Spezifikation angegeben wird, wirdxterm
mit einer Kontrollsequenz der gleichen Form geantwortet, mit der die entsprechende dynamische Farbe eingestellt werden kann. Da mehr als ein Paar von Farbnummer und Spezifikation in einer Kontrollsequenz angegeben werdenxterm
kann , kann mehr als eine Antwort erfolgen.Ich habe ernsthafte Zweifel, ob dies wahrscheinlich in einem anderen Terminal-Emulator funktioniert, aber in einem,
xterm
wenn Sie ...... das
xterm
wird eine Sequenz wie die folgende in den Eingabepuffer Ihres Terminals zurückschieben ...... für den Hintergrund oder für den Vordergrund:
quelle
printf '\033]10;rgb:8f8f/8f8f/8f8f8f\007
, färbt sich der gesamte Text im Terminal, der zuvor "normal" war, hellblau. Anschließend wird beim Ausführen derprintf '\033]10;rgb:bfbfbf/bfbfbf/bfbfbf\007'
gesamte hellblaue Text auf "normal" zurückgesetzt. Wie verwende ich diesen Wert, um nur die Farbe des Textes in der Zukunft zu ändern?clear
zuerst?printf '\033]10;?\007'
fragt xterm nach der aktuellen Vordergrundfarbe des Terminals. Wenn Ihr Terminal mit "normal" gestartet wurde (z. B. 7 als Vordergrundfarbe), Sie abertput setaf 3
vor dem Ausführen desprintf
Befehls ausgeführt haben, gibt derprintf
obige Befehl weiterhin "normal" zurück - und das ist richtig, da dies die aktuelle Vordergrundfarbe Ihres Terminals ist. Was ich gehofft hatte, war eine Möglichkeit, die aktuelle Farbe der aktuellen Cursorposition abzurufen, damit ich sie abspeichern und später "wiederherstellen" konnte - wie im OP.xterm
der Betreuer und hier ein aktives Mitglied. (der link ist zu seiner website -xterm
die escape docs sind umfangreich - und im