2011-01-07 47 views
6

Escribí una aplicación Java que tiene un tiempo (input.readLine()) que continúa leyendo la entrada hasta que el usuario escriba un comando de abandono. Tengo un script .bat para iniciarlo en Windows y un .sh para iniciarlo en Linux. La aplicación funciona bien en ambos.¿Cómo acepto las entradas de flecha izquierda/derecha/arriba/abajo en un shell de Linux?

En Windows, si escribe un comando como "consultar correo electrónico" y pulsa enter, ejecutará el comando. Luego, en el siguiente mensaje (es decir: la próxima vez que la aplicación Java lea una línea de entrada) puede presionar la flecha hacia arriba y recuperar su comando "verificar correo electrónico". Puede presionar la tecla de la flecha izquierda para mover el cursor hacia la izquierda, etc. Esto es exactamente como lo quiero.

En Linux, sin embargo, al presionar la tecla hacia arriba, aparece^[[D para que aparezca. Las teclas de flecha izquierda y derecha producen una salida ASCII similar, como^[[C.

He oído hablar de stty y ver las páginas de manual, pero no puedo averiguar lo que tengo que cambiar en el script .sh con lanzamientos mi aplicación Java. ¿Alguien puede ayudarme?

Respuesta

1

La función readline se utiliza para esta materia en sistemas Unix, pero es una función C.

Here se puede encontrar una capa Java para ello. (Nunca he usado)

4

La solución más sencilla es utilizar un envoltorio externo que lee una línea con capacidades de edición, a continuación, lo envía a su programa. Un buen contenedor es rlwrap.

El uso de una herramienta separada está en consonancia con la filosofía Unix de utilizar herramientas diferentes para distintos fines (edición de línea y sea cual sea su programa lo hace). También es simple: simplemente haz que tu shell shellper ejecute rlwrap myprogram en lugar de myprogram.

Subyacente readline library (sin relación con cualquier readLine método en Java, usted querrá una capa Java como Java-Readline) es más trabajo para integrar, y limita su programa para ser GPL. Haga eso solo si desea más de lo que puede proporcionar un envoltorio, principalmente terminaciones específicas de la aplicación.

Cuestiones relacionadas