Настройка неканонического режима на стандартном сервере с помощью Ruby
Вопрос
Я играю с созданием простой игры на основе терминала с Ruby, и в настоящее время я пытаюсь придумать способ считывания входных данных с терминала.
До сих пор я использовал gets
, но я бы хотел, чтобы игра реагировала мгновенно, не требуя перевода строки (чтобы вам не нужно было нажимать клавишу, а затем вводить).
Я понял, что мне нужно перевести терминал в неканонический режим, и я предполагаю, что смогу сделать это, вызвав $stdin.ioctl
.Проблема в том, что я не уверен, какие аргументы или флаги я должен передавать этому, а документация и поисковые запросы просто приводят к информации о базовой функции C.
Кто-нибудь может сказать мне, как я должен звонить $stdin.ioctl
с?Я использую Terminal.app/ tcsh на OSX Leopard.
Редактировать:Это то, что я в конечном итоге использовал, благодаря MarkusQ:
%x{stty -icanon -echo}
key = STDIN.read(1)
Решение
Ваша проблема находится за пределами ruby.
Самый простой ответ:оберните ввод-вывод в %x{stty -raw echo} и %x{stty -raw echo}, чтобы изменить режим с помощью stty.
Вероятно, вы захотите создать и обеспечить обработчик выхода, чтобы убедиться, что режим будет восстановлен при выходе.
-- МаркусК