Impostazione modalità non canonica su stdin con Ruby
Domanda
che sto giocando intorno con fare un semplice gioco basato su terminale con Ruby, e sto attualmente cercando di trovare un modo di leggere l'input dal terminale.
Finora ho usato gets
, ma mi piacerebbe avere il gioco reagire immediatamente senza la necessità di un ritorno a capo (quindi non c'è bisogno di premere un tasto, e poi ENTER).
Ho capito che ho bisogno di mettere il terminale in modalità non canonica, e sto assumendo posso farlo chiamando $stdin.ioctl
. Il problema è che io non sono sicuro di quali argomenti o bandiere dovrei essere di passaggio a questo, e la documentazione e le ricerche solo portare a informazioni sulla funzione C sottostante.
Qualcuno può dirmi che cosa dovrei chiamando $stdin.ioctl
con? Sto usando Terminal.app/tcsh su OSX Leopard.
Edit: Questo è quello che ho finito per usare, grazie alla MarkusQ:
%x{stty -icanon -echo}
key = STDIN.read(1)
Soluzione
Il tuo problema è al di fuori di rubino.
risposta più semplice:. Avvolgere il vostro IO in% x {stty -raw eco} e {x% stty -raw eco} per cambiare la modalità con stty
Probabilmente si vorrà fare e garantire un gestore di uscita per assicurarsi che la modalità è impostata indietro quando si esce.
- MarkusQ