Question

Je suis jouer avec faire un jeu simple basé sur le terminal avec Ruby, et je suis en train d'essayer de trouver un moyen de lecture d'entrée du terminal.

Jusqu'à présent, je me sers gets, mais je voudrais avoir le jeu réagir instantanément sans nécessiter une nouvelle ligne (si vous ne avez pas besoin d'appuyer sur une touche, entrez alors).

J'ai compris que je dois mettre le terminal en mode non canonique, et je suppose que je peux le faire en appelant $stdin.ioctl. Le problème est, je ne sais pas quels arguments ou des drapeaux que je devrais passer à cela, ainsi que la documentation et les recherches mène juste des informations sur la fonction C sous-jacente.

Quelqu'un peut-il me dire ce que je devrait appeler $stdin.ioctl avec? J'utilise Terminal.app/tcsh sur Mac OS X Leopard.

Edit: Voici ce que je fini par utiliser, grâce à MarkusQ:

%x{stty -icanon -echo}
key = STDIN.read(1)
Était-ce utile?

La solution

Votre problème est en dehors de rubis.

réponse la plus facile. Enveloppez IO% x {} echo stty grège et x% {stty grège echo} pour changer le mode avec stty

Vous aurez probablement envie de faire et d'assurer un gestionnaire de sortie pour assurer le mode est en retrait lorsque vous quittez.

- MarkusQ

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top