Pergunta

Eu estou brincando com fazer um jogo de terminais baseados em simples com Ruby, e atualmente estou tentando chegar a uma maneira de ler a entrada do terminal.

Até agora eu tenho usado gets, mas eu gostaria de ter o jogo reagir instantaneamente sem a necessidade de uma nova linha (assim você não precisa pressionar uma chave, seguida, ENTER).

Eu descobri que eu preciso para colocar o terminal em modo não-canônico, e eu estou supondo que eu posso fazer isso chamando $stdin.ioctl. O problema é, eu não tenho certeza do que argumentos ou sinalizadores que eu deveria estar passando a isso, e a documentação e buscas apenas levar a informações sobre a função C subjacente.

Alguém pode me dizer o que eu deveria estar chamando $stdin.ioctl com? Estou usando Terminal.app/tcsh em OSX Leopard.

Edit: Isto é o que eu acabei usando, graças a MarkusQ:

%x{stty -icanon -echo}
key = STDIN.read(1)
Foi útil?

Solução

Seu problema está fora de rubi.

resposta mais fácil:. Envolver seu IO em% x {stty crua echo} e {% x stty crua echo} para alterar o modo com stty

Você provavelmente vai querer fazer e garantir um manipulador de saída para ter certeza o modo é definido de volta quando você sair.

- MarkusQ

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top