# Erweiterte Konsolenausgabe/-Eingabe



## mccae (25. November 2009)

Hallo!

Ich frage mich wie es möglich ist, Konsolenapplikationen zu erstellen, deren sichtbarer Text sich dem aktuellen Fenster anpasst.....

Damit ihr wisst was ich meine, hier ein Beispiel anhand eines Gameservers:







Bei diesem Beispiel werden die Werte oben ständig aktualisiert, und es ist möglich durch den Text in der Mitte mit BILD-AUF und BILD-AB zu scrollen (dabei scrollt der Text zwischen den Werten oben, und dem Inputfeld unten).

Weiters passt sich der Inhalt des Fensters an, wenn ich die Konsole größer ziehe:






Dies funktioniert lokal auf der Windows-Maschine und über die Remote-console über SSH auf einem Debian Root.

Meine Fragen: 

Wie funktioniert das?! 

Wie ist es einem Programm (in diesem Fall einer C++ Applikation) möglich auf Werte wie die Größe der Konsole und gedrückte Tasten (BILD-AUF, usw.) zuzugreifen?

Und die wichtigste Frage: Kann ich dies auch in Java realisieren?

Schon einmal vielen Dank im Vorraus für jegliche Antworten


----------



## zeja (25. November 2009)

Das mit der Größer der Console weiß ich nicht. Aber du kannst Backspace nutzen um Zeichen auf der Konsole zu löschen und dann neue Zeichen hinzuschreiben. Z.B. für Fortschrittsangaben. Auf Bild rauf und Bild runter reagierst du in dem du mit read von der Konsole liest und dann den Inhalt wieder neu aufbaust. Soweit die Theorie. Ist mir gerade zu spät um das noch selbst auszuprobieren


----------



## mccae (26. November 2009)

zeja hat gesagt.:


> Das mit der Größer der Console weiß ich nicht. Aber du kannst Backspace nutzen um Zeichen auf der Konsole zu löschen und dann neue Zeichen hinzuschreiben. Z.B. für Fortschrittsangaben. Auf Bild rauf und Bild runter reagierst du in dem du mit read von der Konsole liest und dann den Inhalt wieder neu aufbaust. Soweit die Theorie. Ist mir gerade zu spät um das noch selbst auszuprobieren



Huhu, das Beispiel-Tool schreibt den aktuellen Screen einfach in die Konsole,...
Wenn ich in der TextArea raufscrolle, dann sehe ich die einzelnen vorherigen "Frames",....

Nur frage ich mich, ob es nicht etwas fertiges gibt um die Konsole zu manipulieren.

Es geht mir nicht umbedingt um das anpassen an die Fenstergröße (was auch nett wäre), sondern um:

- Anzeigen von Tabellen
- Aktualisieren von Werten auf der Commandline
- Scrollen durch die Commandhistory mit BILD-AUF und BILD-AB
- Letzte Zeile soll Input sein und manipulierbar sein. (Passwort Sternchen,...)
- Tab-Vervollständigung

Eine fertige Library oder so wäre genial...

Grüße,
Martin Conrad Caesar


----------



## kabel2 (26. November 2009)

Die Abstraktion dazu heißt unter Unixoiden _Console_ oder _Terminal (Emulation)_.
Ich hab das auch selbst nie ganz gerafft, das eine bezeichnet die physikalisch vorhandene Hardware (Tastatur+Monitor), das andere ein Programm bzw. eine Programmumgebung.
Die englische Wikipedia beschreibt die Win32 Console eher als Terminal Emulation nach meinem Verständnis.

Die Java6 Console hat vergleichsweise wenig bis eigentlich überhaupt keine Funktionalität.
Wie auch, das ist ein betriebssystemabhängiger Teil, und das dauert unter "portablen" Sprachen halt etwas 

Die Bibliotheken, die Du verwendest willst, haben also zwangsläufig einen JNI-Anteil.
Bei Curses weiß ichs net, aber die anderen beiden extrahieren da den Bibliothekscode bei der Initialisierung ins Temp und laden die dann dynamisch.
Scheint wohl ne Java Standardtechnik zu sein.

JLine
JLine ist soeine Bibliothek. Schau mal hier rein, da gibts ein WindowsTerminal.java und ein UnixTerminal.java.

JCurses
Das zweite ist JCurses, ein Curses Nachbau aus Unix. Damit kannst Du ganz ordentlich Faxen machen.

java-console-api
Ein weiteres ist die java-console-api. Die bietet Dir dann das Setzen der Cursorposition etc. Das sieht sehr kompakt aus, kannst Du sicher leicht erweitern.

Was ich mich gerade frage ist wie das Programm Veränderungen der Größe des Ausgabefensters mitkriegt. Hmm, mal gugge, aber jetzt nicht mehr. ;-)


----------



## mccae (28. November 2009)

kabel2 hat gesagt.:


> Die Abstraktion dazu heißt unter Unixoiden _Console_ oder _Terminal (Emulation)_.
> Ich hab das auch selbst nie ganz gerafft, das eine bezeichnet die physikalisch vorhandene Hardware (Tastatur+Monitor), das andere ein Programm bzw. eine Programmumgebung.
> Die englische Wikipedia beschreibt die Win32 Console eher als Terminal Emulation nach meinem Verständnis.
> 
> ...



Huhu, JLine funktioniert nicht über SSH, Telnet, etc,
JCurses ist kaum noch kompatibel, da zu alt (letztes Update: 2002),
und das java-console-api gibts nicht für Linux.

Jetzt ist mir auch alles wurscht, ich will jetzt nur einen Weg finden, die BILD-AUF und BILD-AB Tasten zu erkennen (und andere Tasten wie Pfeiltasten).

Dies geht nicht zufällig mit reinem Java?

Und zu der Fenstergröße:
JLine kann unter Linux die Fenstergröße zurückgeben, unter Windows nicht.
Leider ist das alles zu verbugged...


----------

