2009-02-24 5 views
1

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

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

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

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

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

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

ответ

2

Ваша проблема находится вне рубина.

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

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

- MarkusQ

+0

Вы получили меня на правильном пути со штилевой информацией. Посмотрел и нашел, что мне нужно. Благодаря! – Luke