Настройка неканонического режима на стандартном сервере с помощью Ruby

StackOverflow https://stackoverflow.com/questions/582200

  •  06-09-2019
  •  | 
  •  

Вопрос

Я играю с созданием простой игры на основе терминала с 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.

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

-- МаркусК

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top