Установка неканонического режима на stdin с Ruby - PullRequest
1 голос
/ 24 февраля 2009

Я работаю над созданием простой игры на основе терминала для Ruby, и в настоящее время я пытаюсь найти способ чтения ввода с терминала.

До сих пор я использовал gets, но я бы хотел, чтобы игра реагировала мгновенно, не требуя новой строки (поэтому вам не нужно нажимать клавишу, ТО затем введите).

Я понял, что мне нужно перевести терминал в неканонический режим, и я предполагаю, что могу сделать это, вызвав $stdin.ioctl. Проблема в том, что я не уверен, какие аргументы или флаги мне следует передать, а документация и поиски просто приводят к информации о лежащей в основе функции C.

Может кто-нибудь сказать мне, с чем я должен звонить $stdin.ioctl? Я использую Terminal.app/tcsh на OSX Leopard.

Edit: это то, что я в конечном итоге использовал, благодаря MarkusQ:

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

1 Ответ

3 голосов
/ 25 февраля 2009

Ваша проблема вне рубина.

Самый простой ответ: оберните свой IO в% x {stty -raw echo} и% x {stty -raw echo}, чтобы изменить режим с помощью stty.

Вы, вероятно, захотите сделать и убедиться, что обработчик выхода гарантирует, что режим будет возвращен при выходе.

- MarkusQ

...