2012-03-31 6 views
0

Ich erstelle mein eigenes Java-basiertes Term-Programm und es funktioniert gut mit SSH und Telnet-Verbindungen. Aber jetzt möchte ich eine lokale direkte Verbindung wie xterm oder gnome-terminal tun. Ich starte "bash -i -l" mit ProcessBuilder und benutze getInputStream()/getOutputStream() und es scheint zu funktionieren. (Ich muss redirectErrorStream (true) aufrufen) Mein einziges Problem ist, dass bash die TERM-Umgebungsvariable zu ignorieren scheint und keine ANSI-Codes generiert. Ich bekomme eine Eingabeaufforderung, aber läuft "ls -la" fehlt CRs und Farbe. Außerdem gibt es keine Rückmeldung (ähnlich wie bei der SSH-Verbindung).Ich möchte bash direkt interaktiv ausführen, aber keine ANSI-Codes erhalten

Ich benutze JCraft's JSch Bibliothek und rufe setPtyType ("vt100") für die SSH Verbindungen auf. Wie würde ich das machen, wenn ich bash direkt ausführen würde?

Ich benutze keine pty, ist das nötig? Die Zuweisung einer Pty würde natürlich nativen Code erfordern. Wenn ja, wie funktioniert pty's.

Ich habe versucht, Xterm Quellcode zu betrachten, aber das ist ein Durcheinander. Jetzt erinnere ich mich daran, warum ich nie wieder zum C-Code zurückkehren werde.

Gibt es eine einfache Lösung?

Danke.

Antwort

0

Soweit ls geht, kann es sein, dass Ihr ls ist Alias ​​für ls --color=auto (Sie können dies überprüfen, indem Sie alias ls in einem Terminal ausgeführt wird). In diesem Fall wird ls eine begründete Schätzung durchführen, ob die Farbcodes ausgegeben werden sollen. Von man ls:

Farbe Mit Dateitypen zu unterscheiden, wird sowohl von Standard und mit --color = nie deaktiviert. Mit --color = auto gibt ls nur dann Farbcodes aus, wenn der Standardausgang an ein Terminal angeschlossen ist.

Viele andere Programme werden wahrscheinlich so etwas tun.

Soweit Ihre allgemeine Studien der Terminal-Emulation geht, „Terminator“ scheint einige pty Emulation (obwohl mit einer JNI-Bibliothek) zu tun, die vielleicht haben Sie einige Ideen aus zu erreichen:

http://software.jessies.org/terminator/