Console: ConsoleColor() richtig zurücksetzen

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Console: ConsoleColor() richtig zurücksetzen

Beitrag von DarkSoul »

Hallo Forum.

Ich habe unter Ubuntu ein kleines Grafikproblem.

Wenn ich in einer Konsolenanwendung eine Fehlermeldung ausgebe, wird diese mit ConsoleColor() eingefärbt. Gelbe Schrift auf rotem Untergrund.

Ich habe den Hintergrund auf 0 gesetzt. Aber damit stimmt die Farbe weiterhin nicht und ich habe hässliche Farbabstufungen, weil die Konsole von Ubuntu leicht lila, aber Farbcode 0 die Farbe Grau ergibt. Und Farbcode 5 ist viel zu lila.

Welche Parameter muss ich ConsoleColor übergeben, damit der ursprüngliche Zustand wiederhergestellt wird? Also so, dass er wieder mit den System-Standardfarben weitermacht.

Code: Alles auswählen

...
ConsoleColor(15, 4)
Print("Bla")
ConsoleColor(???,???) ;Wie geht das hier richtig?
...
Bild
Omi
Beiträge: 143
Registriert: 25.03.2013 09:59

Re: Console: ConsoleColor() richtig zurücksetzen

Beitrag von Omi »

Hallo DarkSoul!
Das erst mal (seit 2 1/2 Jahren), dass ich die PB-Console einsetze :roll:

Wenn ich die Farbliste in der Hilfe für ConsoleColor(,) ansehe sollten diese den System-Terminal-Farben entsprechen. Diese könntest Du mit diesem Script (von http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html) testen ...
#!/bin/bash
#
# This file echoes a bunch of color codes to the
# terminal to demonstrate what's available. Each
# line is the color code of one forground color,
# out of 17 (default + 16 escapes), followed by a
# test use of that color on all nine background
# colors (default + 8 escapes).
#

T='gYw' # The test text

echo -e "\n 40m 41m 42m 43m\
44m 45m 46m 47m";

for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \
'1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \
' 36m' '1;36m' ' 37m' '1;37m';
do FG=${FGs// /}
echo -en " $FGs \033[$FG $T "
for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
do echo -en "$EINS \033[$FG\033[$BG $T \033[0m";
done
echo;
done
echo
Dieses Script als z.B. TerminalColors.sh speichern, das executable-Flag setzen und einem Terminal ausführen.
Ein PB-Console-Programm wie

Code: Alles auswählen

  OpenConsole()
  PrintN("die ursprünglichen Farben ...")
  ConsoleColor(14, 1)
  PrintN("Zeile mit blauem Hintergrund und gelber Schrift ? ...")
  ConsoleColor(7, 0)
  PrintN("wieder die ursprünglichen Farben ...")
  PrintN("Alle Textfarben ...")
  For I= 0 To 15
  	ConsoleColor(I, 0)
  	PrintN("Text color " + Str(I))
  Next 
  Input()
liefert nicht die selben Farben (insbes. 14 + 15) und auch nicht die (identischen) in der Hilfe versprochenen ?
Wie PB diese Farben festlegt (System oder selbst definiert) weiß ich nicht aber irgend wat passt hier tatsächlich nicht!

Allerdings wird mit ConsoleColor(7, 0) wieder die urspüngliche Farbe wie beim Console-Start hergestellt - würde also einem Farb-Reset entsprechen.
Vielleicht hat ja noch jemand eine schlauere Idee dazu, sonst müßte man es mal im Bugreport anbieten.

Viele Grüße, Charly
PureBasic Linux-API-Library: http://www.chabba.de
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: Console: ConsoleColor() richtig zurücksetzen

Beitrag von DarkSoul »

Allerdings wird mit ConsoleColor(7, 0) wieder die urspüngliche Farbe wie beim Console-Start hergestellt - würde also einem Farb-Reset entsprechen.
Vielleicht hat ja noch jemand eine schlauere Idee dazu, sonst müßte man es mal im Bugreport anbieten.
Eben das ist bei mir nicht der Fall. Er erzwingt dann Hellgrau auf Dunkelgrau und nicht weiß auf dunkellila, wie es richtig wäre (Siehe hier: http://www.aphilia.info/wp-content/uplo ... rminal.jpg). Unter Windows entsprechen die Farbcodes denen aus guten alten QBASIC-Zeiten.

Unter Windows hat es von XP bis 8.1 korrekt funktioniert. (Das betroffene Programm möchte ich nach Linux portieren und dabei ist mir genau das um die Ohren geflogen)

Ich bin gerade auf Windows. Wenn ich wieder auf Ubuntu bin, werde ich das mit dem Bash-Script mal machen :)
Bild
Omi
Beiträge: 143
Registriert: 25.03.2013 09:59

Re: Console: ConsoleColor() richtig zurücksetzen

Beitrag von Omi »

Hallo DarkSoul!

Ich hab nochmal ein Luxus-Terminal mit konfigurierbaren Farben als Standard gesetzt, das auch PB für den Console-Befehl verwendet. Hier sind zusätzlich zu den 16 Farben je eine Back- und Foreground-Farbe definiert, in denen auch PB beim jungfräulichen Öffnen ausgibt. Dies sind jedoch nicht die Farben aus ConsoleColor(7, 0) und auch nicht eine der Farben 0 - 15. PB scheint auf diese beiden Farben auch keinen Zugriff zu haben ? (Stand PB5.5B1)

Als momentanen Notbehelf würde ich vor der ersten Ausgabe ConsoleColor(7, 0) ausführen. Das sind dann zwar nicht die Linux-Terminal-Default-Farben, aber man kann die Console jederzeit für Standardausgaben darauf zurücksetzen.

Nichtsdestotrotz: Wenn man mein obiges PB-Beispiel startet und im Terminal dann die Farbthemen umstellt, ändern einige farbige Textzeilen der PB-Ausgabe die Farben, andere nicht. Farben sind mehrfach verwendet die im Terminal nicht doppelt definiert sind und z.B. ein im Terminal definiertes Gelb wird im Beispiel generell nicht verwendet.
Ob dies eine nicht verstandene PB-'Eigenwilligkeit' oder ein Bug ist kann ich jedoch nicht beantworten.

Viele Grüße, Charly
PureBasic Linux-API-Library: http://www.chabba.de
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: Console: ConsoleColor() richtig zurücksetzen

Beitrag von DarkSoul »

Naja, wenn das wirklich ein PB-seitiger Bug ist, ist das jetzt nicht so schlimm...

Das Programm ist eine Serversoftware. Ein simpler HTTP-Server, der zu einer HTML5-App gehört, die man ohne externe Software direkt im LAN mittels Browser nutzen kann.

Notfalls fliegen die Farben halt unter Linux raus.

Ich lege das erstmal auf Eis. PB versagt hier gerade kläglich unter Ubuntu, da noch viel schlimmere Sachen aufgetreten sind:

- Die Console geht mittendrin immer zu (aber der Debugger läuft weiter :shock: )
- Die Console geht auch dann mitsamt Debugger zu, wenn man viele Daten in kurzer Zeit überträgt. PB sagt dann, dass das Programm unerwartet beendet worden ist. Die Zeile nach der SendDataBlabla() wird dabei nicht mehr aufgerufen.
- Der zugewiesene Port wird nach Programmende nicht wieder freigegeben.
- Große Speicherlecks innerhalb kurzer Zeit. Code, wie...

Code: Alles auswählen

Repeat
  *p = AllocateMemory(1024*1024*1024)
  FreeMemory(*p)
  Delay(200)
Forever
...führt nach einigen Minuten unter Ubuntu zum allmählichen Volllaufen des RAMs.

Ich werde erstmal die Windows-Version mit WINE betreiben. Die funktioniert wenigstens. :mrgreen:
Bild
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: Console: ConsoleColor() richtig zurücksetzen

Beitrag von DarkSoul »

Nachtrag @ Omi:

Ich habe deine Codes oben ausgeführt

Das ist herausgekommen:
http://www.directupload.net/file/d/4404 ... 27_jpg.htm
- Bash macht die Farben richtig. Also die Console könnte, wenn sie wollte :mrgreen:
- PB macht alles falsch. Die Umschaltung zu den helleren Farbversionen scheint ebenfalls nicht zu gehen. :roll:. Die Farbe 6 sollte doch auch eher Braun und nicht farblos sein.

Nochmal Nachtrag:
Ich habe es nochmal ein wenig ausgeweitet:
http://www.directupload.net/file/d/4404 ... vu_png.htm

Mein Bauch sagt mir, dass da irgenwie auf die gute alte DOS-Zeit zurückgegriffen wird. Weil nun gerade Farbcode 6 hatte doch bei EGA eine Besonderheit, dass die Farbe erst im Bildschirm von Dunkelgelb auf Braun umgeschaltet wurde. Irgendwie sowas war da.
Bild
Antworten