Как использовать режим cbreak в терминальном приложении Ruby? - PullRequest
0 голосов
/ 05 января 2011

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

Я попытался просто запустить x% [cbreak ()] в верхней части моего скрипта, но это не помогло.не работаетЯ также видел, что можно использовать (n) проклятий для достижения тех же результатов, хотя это кажется излишним.

У кого-нибудь есть предложения о том, как это реализовать?

Спасибо

Ответы [ 2 ]

1 голос
/ 05 января 2011

Одним из решений, которое позволяет избежать использования curses (что мне трудно реализовать), является использование команды read оболочки через %x.Неправильно заглядывать в оболочку, чтобы делать что-то, за что должен отвечать STDIN Руби, но это просто и работает.

#! /usr/bin/ruby

puts "Please enter your first initial"

str = %x[read -s -n1 keypress; echo $keypress]

puts "Your first inital is " + str
1 голос
/ 05 января 2011

cbreak - это вызов функции curses, поэтому %x определенно не применяется (то есть для выполнения команд оболочки). cbreak определено в стандартной библиотеке curses, так что это, вероятно, будет вашим лучшим выбором.

См:
http://ruby -doc.org / STDLIB / libdoc / проклятий / RDoc / классы / Curses.html # M000280

Редактировать : вы также можете проверить Curses.getch

...