Можно ли получить каждый char из STDIN после его предоставления (не дожидаясь возврата ключа)?
Немедленно получить одиночный char с консоли
Ответ 1
Да, существует множество способов сделать это, и помимо драгоценных камней вы можете напрямую манипулировать с помощью terminfo через драгоценные камни для termios, ncurses или stty program.
tty_param = `stty -g`
system 'stty raw'
a = IO.read '/dev/stdin', 1
system "stty #{tty_param}"
print a
Ответ 2
Это возможно с помощью Ruby 1.9.3 нового метода getch
:
require 'io/console'
input = STDIN.getch
Docs (Core): http://ruby-doc.org/core-2.3.0/IO.html#class-IO-label-io-2Fconsole
Документы (Lib): http://ruby-doc.org/stdlib-2.3.0/libdoc/io/console/rdoc/IO.html#method-i-getch
Источник: https://github.com/ruby/ruby/tree/trunk/ext/io/console
Ответ 3
Используйте Highline gem:
require "highline/system_extensions" # gem install highline
include HighLine::SystemExtensions
print "Enter one character: "
char = get_character
puts char.chr
из блог JEG II.
Ответ 4
Для неблокирующего решения см. мой ответ fooobar.com/info/23000/...
"Как получить один символ в рубине без нажатия клавиши ввода