Frage

Hey Leute i Konsole apps Druckfarben zu sehen und gesehen zu Anwendungen wie ffmpeg Druck Text über sich selbst, anstatt eine neue Zeile. Wie kann ich über eine vorhandene Leitung drucken? Ich möchte in meiner Konsole app fps angezeigt werden entweder an der Spitze oder ganz unten und haben regelmäßige printfs dorthin gehen und blättern normalerweise

-edit- Ich brauche dies für Fenster, aber dies bedeutet, Cross-Plattform zu sein, so dass ich schließlich einen Linux und Mac Implementierung haben werde

War es hilfreich?

Lösung

Es gibt zwei einfache Möglichkeiten, die Arbeit auf Linux sowie Fenster, aber nur für eine Zeile:

  • printf("\b"); wird für ein Zeichen zurückgeben, so dass Sie könnte zählen, wie viele Zeichen, das Sie wollen ein Zeichen zurückzugehen und diese in einer Schleife abfeuern, oder Sie wissen, dass Sie nur n Zahlen schreiben und tun es wie
    printf("\b\b\b\b\b\b\b\b\b\b");
  • printf("text to be overwritten by next printf\r"); dies wird den Cursor an den Anfang der Zeile zurückkehren, so dass jeder nächste printf wird es überschrieben. Achten Sie darauf, eine Reihe von gleicher Länge zu schreiben oder mehr, so dass Sie es vollständig überschreiben.

Wenn Sie mehrere Zeilen umschreiben wollen, gibt es nichts so portabel wie ncurses , gibt es denn es libs auf praktisch jedes Betriebssystem, und Sie müssen nicht um die ANSI-Unterschiede nehmen.

edit: hinzugefügt Link zu ncurses Wikipedia-Seite, gibt große Übersicht und Einführung sowie Linkliste und vielleicht eine Übersetzung Ihre bevorzugte Sprache

Andere Tipps

Überprüfen Sie heraus ncurses. Es hat Bindings für die meisten Skriptsprachen.

Sie können '\r' anstelle von '\n'.

Die ASCII-Zeichennummer 8 (auch bekannt als Strg-H, BS oder Backspace) kann Sie wieder auf ein Zeichen. ASCII-Zeichennummer 13 (A.K.A Ctrl-M, CR oder Carriage Return) gibt den Cursor sich am Anfang der Zeile.

Wenn Sie arbeiten in C try putchar(8); und putchar(13);

Die Magie der Farben, Cursor Ortungs- und bliking usw. sind innerhalb ANSI Escape-Codes . Jede Textkonsole fähig ANSI-Codes Handhabung können sie verwenden nur den Druck auf sie aus der Konsole (d.h. mittels des Echos in einem Schlagindex oder printf () Funktion in C).

Unix-Terminals unterstützt ANSI-Escape-Sequenzen und Windows-Welt verwendet, um sie wieder in der alten MS-DOS Tagen zu unterstützen, aber die multibyte Konsole Unterstützung ein Ende zu setzen diese. Es gibt mehr Informationen hier . Allerdings gibt es andere Möglichkeiten aus nur ANSI-Sequenzen Druck unter Windows zur Verfügung. Außerdem, wenn Sie Cygwin auf Ihrem Windows-Bearbeitungs installiert ANSI-Codes funktionieren genauso groß wie auf jedem Unix-Terminal.

Viele Leute erwähnen Ncurses-Bibliothek, die der de-facto-Standard für alle gui artigen Text-basierten Anwendungen ist. Was diese Bibliothek tut, ist alle Terminal Unterschiede zu verbergen (Windows / Unix-Varianten) über alle Plattformen die gleichen Informationen so identisch wie möglich zu vertreten, wenn auch aus meiner eigenen Erfahrung, die ich Ihnen sagen, dies nicht immer der Fall ist (dh typische Textfensterrahmen ändern, weil die besonderen Zeichen unter allen Zeichencodierungen nicht verfügbar sind). Das Gegenstück zu ncurses ist, dass es eine vollständige API ist und es ist viel schwieriger, mit ihm zu beginnen, als nur einige Flucht ANSI-Sequenzen auszuschreiben für einfache Dinge wie die Schriftfarbe ändern, Bildschirm reinigen oder den Cursor auf einem zufälligen Zurückbewegen Position.

Aus Gründen der Vollständigkeit mir ein Beispiel für die Verwendung von ANSI-Sequenz unter Linux einfügen, um die Abfrage zu blau wechselt und zeigt das Datum:

PS1="\[\033[34m\][\$(date +%H%M)][\u@\h:\w]$ "

Sie können mit Ncurses -

  

ncurses Paket ist eine Funktionsbibliothek für Terminal-unabhängige Bildschirm-Malerei und Input-Ereignisbehandlung, die ein hohes Maß Bildschirm Modell für den Programmierer stellt die Unterschiede zwischen den Terminaltypen und dabei die automatische Optimierung der Ausgabe versteckt einen ganzen Bildschirm von Text zu ändern in ein anderes

auf der Plattform abhängt, die Sie auf, es gibt wahrscheinlich eine leistungsfähige API entwickeln, die Sie, anstatt alte ASCII-Steuercodes verwenden könnten.

z. Wenn Sie auf Win32 arbeiten, können Sie tatsächlich die Konsole Bildschirmpuffer direkt manipulieren.

Ein guter Anfang hier könnte sein, http://msdn.microsoft.com/en-us /library/ms683171(VS.85).aspx

Ich habe für ähnliche Funktionen / API suchen, die mir die Konsole als etwas für den Zugriff auf andere als ein Strom von Text für andere Plattformen ermöglichen würden. Haben noch nichts gefunden, aber dann wieder, ich habe nicht auf der Suche ist so schwer.

Hoffe, es hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top