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)
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top