2011-01-07 6 views
6

Ich schrieb eine Java-Anwendung, die eine while (input.readLine()) hat, die Eingabe weiter liest, bis der Benutzer einen Beenden-Befehl eingibt. Ich habe ein .bat-Skript, um es in Windows und ein .sh zu starten, um es in Linux zu starten. Die Anwendung funktioniert in beiden gut.Wie kann ich links/rechts/oben/unten Pfeil-Eingaben in einer Linux-Shell akzeptieren?

Wenn Sie in Windows einen Befehl wie "check email" eingeben und die Eingabetaste drücken, wird der Befehl ausgeführt. An der nächsten Eingabeaufforderung (das heißt, wenn die Java-Anwendung das nächste Mal eine Eingabezeile liest) können Sie den Pfeil nach oben drücken und es ruft den Befehl "E-Mail abrufen" ab. Sie könnten die linke Pfeiltaste drücken, um den Cursor nach links zu bewegen, usw. Das ist alles genau so, wie ich es möchte.

Unter Linux bewirkt das Drücken der Nach-oben-Taste jedoch, dass^[[D angezeigt wird. Die linke und die rechte Pfeiltaste erzeugen eine ähnliche ASCII-Ausgabe, wie^[[C.

Ich habe von stty gehört und die man-Seiten angesehen, aber kann nicht herausfinden, was ich in der .sh-Skript ändern muss mit startet meine Java-Anwendung. Kann mir jemand helfen?

Antwort

1

Die readline Funktion wird für dieses Zeug auf Unices verwendet, aber es ist eine C-Funktion.

Here Sie könnten einen Java-Wrapper dafür finden. (Ich habe es nie benutzt)

4

Die einfachste Lösung besteht darin, einen externen Wrapper zu verwenden, der eine Zeile mit Editierfunktionen liest und dann an Ihr Programm sendet. Ein guter Wrapper ist rlwrap.

Die Verwendung eines separaten Tools entspricht der Unix-Philosophie, separate Tools für separate Zwecke zu verwenden (Zeileneditierung und was auch immer Ihr Programm tut). Es ist auch einfach: Machen Sie einfach Ihren Shell-Wrapper rlwrap myprogram statt myprogram ausführen.

Die zugrunde liegende readline library (keine Beziehung zu jedem readLine Methode in Java, können Sie ein Java-Wrapper wollen werden wie Java-Readline) mehr Arbeit zu integrieren ist, und schränkt das Programm GPL zu sein. Gehen Sie dafür nur dann vor, wenn Sie mehr als das erreichen wollen, was ein Wrapper bieten kann - in erster Linie anwendungsspezifische Vervollständigungen.

Verwandte Themen