Improved Console für Unix Systeme
-
Ergibt sich da nicht ein Problem mit der Lebenszeit von cout? Ich bin mir da nicht sicher, darum frag ich lieber nochmal nach.
-
volkard schrieb:
314159265358979 schrieb:
- Setzen der Textfarbe durch foreground() und lightforeground()
Wäre nicht nur forground() besser und doppelt so viele Farbwerte?
Habe ich überlegt und wollte ich auch ursprünglich so machen. Vielleicht bau ichs doch noch um.
-
Ich dachte immer für Unix-Systeme gäbe es da schon ncurses, ist das nicht so einfach benutzbar?
MfG SideWinder
-
Ich kenne ncurses nicht, aber soweit ich mir das ergoogelt habe, ist das eine C-Bibliothek, das finde ich nicht so schön wie Manipulatoren
-
314159265358979 schrieb:
Diese ganzen Funktionen lassen sich wie Stream-Manipulatoren verwenden. Funktionen die mit der Geometrie des Fensters zusammenhängen (verschieben, resizen, ...) habe ich bewusst weggelassen, da ich sie für unnötig erachte. Ihr dürft mich aber gerne eines besseren belehren.
Ich hab' mir den Code nicht angesehen, aber hoffentlich hast du daran gedacht, was passiert, wenn man deine Manipulatoren auf etwas anderes als cout loslässt. Was die Aufräumarbeiten angeht, wäre eventuell ios_base::register_callback() ein Lösungsansatz.
-
Meine Manipulatoren geben ganz normale Zeichen an den Streams aus, man kann die Texte also auch persistent speichern und wiederverwenden
-
Also ein bisschen Feedback wäre schon ganz nett
Habt ihr nicht schon immer von einer Bunten Unix-Konsole geträumt?
-
314159265358979 schrieb:
Habt ihr nicht schon immer von einer Bunten Unix-Konsole geträumt?
Das gibt nur komische Zeichen, wenn ich die Ausgabe irgendwohin pipe
.
-
Sind ja im Prinzip nur "komische Zeichen". Auf der Konsole sollte es allerdings bunt sein.
-
also bei mir funktioniert das gut, allerdings musste ich die Datei ändern, bei mir gabs einen Comilerfehler: "'style' is already declared in this scope" oder so.
Ich habs mit GCC 4.2 kompiliert, liegt wohl daran.auf jeden Fall könntest du doch eine Klasse daraus machen, deren Destruktor reset "aufruft". Man könnte ein Objekt dieser Klasse als "alternatives" cout verwenden, z.b.:
int main() { // angenommen, die Klasse hieße Print Print MyOut; MyOut << foreground(blue) << "Hallo Welt!\n"; return 0; }
ich hab jedenfalls mal sowas ähnliches als Wrapper um NCurses gemacht.
-
314159265358979 schrieb:
Sind ja im Prinzip nur "komische Zeichen". Auf der Konsole sollte es allerdings bunt sein.
Nee, ich meine, dass wenn ich ein Programm schreibe, dass auf die Standardausgabe ausgibt, dann erwarte ich auch, dass diese Ausgabe auch von Nicht-Konsolen vernünftig verarbeitet werden kann. Wenn ich will, dass mein Programm nur Konsole kann (etwa eine tolle Benutzeroberfläche hat), dann nehme ich auch eine richtige Konsolenbibliothek und kein aufgebohrtes cout. Da hab ich dann auch Farbe.
Wobei mir ein C++-Wrapper um die (meistens sehr C-igen) Konsolenbibliotheken durchaus sehr recht wäre, falls ich mal so etwas schreiben möchte (Das ist derzeit jedoch nicht absehbar, dass ich so etwas jemals tun werde).Ja, im Prinzip heißt das, dass ich den Sinn hinter deinem Projekt nicht einsehe. Wenn schon improved Console, dann hätte ich gleich auf einer Konsolenbibliothek aufgesetzt. Das kann man natürlich auch gerne alles selber machen (die Form die du derzeit hast ist auch ok), aber deine Bibliothek braucht noch dringend ein paar Grundfunktionen einer Konsolenbibliothek, wie Cursorpositionierung und Feedback über die Fenstergröße. Denn wenn schon bunt, dann auch gleich eine "richtige" Oberfläche.
-
Ich programmiere selten unter Unix, jedoch kann man doch irgendwie erkennen, ob stdout auf die Konsole oder in eine Pipe geht. Schließlich macht
ls
mit--color=tty
genau das Gewünschte. Insofern wäre es für die Bibliothek sinnvoll, wenn das entweder automatisch erkannt werden würde, woraufhin alle Funktionen keinen Effekt haben, oder es eine Möglichkeit zur Erkennung und zur manuellen globalen Deaktivierung der Formatierung gibt.
-
Alptraeume
Besonders wenn man unter Linux ne Konsole aufm anderen (Nicht Linux) System mit ncurses aufmacht ^^Ciao
-
Ich verstehe euer Problem nicht. Wenn ihr die Farben nicht in der Datei oder wo auch immer haben wollt, dann haut sie da einfach nicht rein.
Wenn man Nachrichten in einer Datei samt Farben speichern will, ist sowas nützlich. Und wenn ihr die Farben nicht wollt, dann lasst es eben bleiben.
-
ipsec schrieb:
Ich programmiere selten unter Unix, jedoch kann man doch irgendwie erkennen, ob stdout auf die Konsole oder in eine Pipe geht.
#include <unistd.h> if(isatty(STDOUT_FILENO)) { /* STDOUT_FILENO == 1 */ ... }
-
Naja, ich hab das ganze ohne nur zum Spaß gemacht. Wenns keiner brauchen kann, dann halt nicht.
-
Ja iss ja auch ganz lustig ...
Aber:Wenn man auf die Console Schreibt, sollt man auch damit rechnen, das man gepipt wird. Wie Du siehst, iss das gar ned so unüblich
Du checkst nix ab. Sicher auch ned, welches TerminalEmulation verwendet wird.
Bei den meisten grafischen (Console -> X11 wie z.b. XTerm, Konsole ...) kann man das einstellen.
Was passiert wenn das Ding auf was uraltem steht ?Deswegen auch der Hinweiss, ncurses verwenden, die checkt das ab .. sollte zumindest.
Ciao ...