Ajuste del modo de no canónica en la entrada estándar con Ruby
Pregunta
Me estoy jugando con la fabricación de un juego basado en terminal sencillo con Ruby, y actualmente estoy tratando de llegar a una forma de leer la entrada de la terminal.
Hasta ahora he estado usando gets
, pero me gustaría tener el juego reaccionar instantáneamente sin necesidad de una nueva línea (lo que no es necesario pulsar una tecla, y luego ENTER).
He descubierto que tengo que poner el terminal en modo no canónica, y yo estoy asumiendo que puedo hacerlo llamando $stdin.ioctl
. El problema es que no estoy seguro de qué argumentos o banderas que debería estar pasando a esto, y la documentación y las búsquedas sólo conducen a la información acerca de la función C subyacente.
Puede alguien decirme lo que debería estar llamando $stdin.ioctl
con? Estoy usando Terminal.app/tcsh en OSX Leopard.
Edit: Esto es lo que terminé usando, gracias a MarkusQ:
%x{stty -icanon -echo}
key = STDIN.read(1)
Solución
Su problema está fuera de rubí.
respuesta más fácil:. Envolver su IO en% x {stty -raw echo} y {x% stty -raw echo} para cambiar el modo con stty
Es probable que quiere hacer y garantizar un controlador de salida para asegurarse de que el modo está ajustado hacia atrás al salir.
- MarkusQ