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