Graue Textausgabe aus Rexx oder Batches

(DE) Anwendungen für Office, Multimedia und Spiele, Werkzeuge, Hilfsprogramme, etc
(EN) Applications for Office, Multimedia or Games, Tools, Utilities, e.g.
Antworten
Benutzeravatar
Frank Wochatz
Beiträge: 1142
Registriert: So 22. Dez 2013, 22:04
Wohnort: Berlin
Kontaktdaten:

Graue Textausgabe aus Rexx oder Batches

Beitrag von Frank Wochatz »

Für Textausgabe mit Ansi-Escape-Sequenzen gibt es ja neben Schwarz und Weiß nur eine handvoll "Alarmfarben" - aber kein grau.

Man kann sich aber eines kleinen Tricks bedienen: schaltet man die Textausgabe auf "Reverse" um, und schaltet dann den Hintergrund wieder zurück auf schwarz bekommt man Text in grauer Farbe.

Die Steuersequenz dafür lautet:

Code: Alles auswählen

"1B"x || "[7;40;1m"
7 = Reverse
40 = Hintergrund schwarz
1 = bold

Es funktioniert komischerweise nur mit dem "bold" Attribut. Ist das nun ein Bug oder ein Feature? Es ist nicht dumentiert, jedenfalls funktioniert es.

Ich benutze das gerade, um Textzeilen in einer Tabelle besser lesbar zu machen, indem ich die Zeilen abwechselnd grau und weiss ausgebe. Hier ein Beispiel in Rexx:

Code: Alles auswählen

/* grautest.cmd */

color1= "1B"x || "[0;7;40;1m"
color2= "1B"x || "[0;37;40;1m"

say color1 || Zeile 1 
say color2 || Zeile 2
say color1 || Zeile 3
say color2 || Zeile 4
say color1 || Zeile 5
say color2 || Zeile 6

call charOut , "1B"x || "[0m" /*reset attr*/

pull dummy
erdmann
Beiträge: 626
Registriert: Mo 4. Jan 2016, 14:36

Beitrag von erdmann »

Und warum nicht einfach "low intensity":

color1= "1B"x || "[0;37m"
color2= "1B"x || "[2;37m"

oder für noch mehr Kontrast:
color1= "1B"x || "[1;37m"
color2= "1B"x || "[2;37m"

Geht das nicht ?


Siehe auch die Beispiele hier:
https://www.nayab.dev/linux/misc/escape-codes
Benutzeravatar
Frank Wochatz
Beiträge: 1142
Registriert: So 22. Dez 2013, 22:04
Wohnort: Berlin
Kontaktdaten:

Beitrag von Frank Wochatz »

Also 0 vs. 1 bringt einen kleinen Kontrast, den man allerdings mit bloßem Auge kaum erkennt (ich hab einen Screenshot vergrößert, um es zu sehen).

Die Anderen Varianten bringen gar keinen Unterschied in der Ausgabe. Ich denke Code 2 ist einfach außer Funktion. Wobei "low intensity" ist scheinbar der Vorgabewert (0), und die 1 steht für "bold" bzw. "high intensity". Insofern wäre 1vs.2 das gleiche wie 1vs0. ich hoffe, das ist jetzt nicht zu kryptisch.

Den besten Kontrast macht die Variante im Eingangspost (Grau vs. Weiß), oder natürlich bunte Farben. Ich habe auch mal im Wolek nachgelesen, offenbar ist das auch abhängig vom Bildschirmadapter. Und etliche Ansi-Codes werden unter OS/2 nicht unterstützt (geht ja anderswo bis RGB...).

Es gibt noch eine Rexx-Dll für Ansi, ich guck mir das später mal an. Aber eigentlich habe ich das Problem ja auch für meinen Einsatzzweck gelöst.
Antworten