23

Is it possible to get each char from STDIN once it is provided (without waiting for return key)?

Phrogz
  • 296,393
  • 112
  • 651
  • 745
Sławosz
  • 11,187
  • 15
  • 73
  • 106

3 Answers3

68

This is possible with Ruby 1.9.3's new getch method:

require 'io/console'
input = STDIN.getch

Docs (Core): http://ruby-doc.org/core-2.3.0/IO.html#class-IO-label-io-2Fconsole

Docs (Lib): http://ruby-doc.org/stdlib-2.3.0/libdoc/io/console/rdoc/IO.html#method-i-getch

Source: https://github.com/ruby/ruby/tree/trunk/ext/io/console

J-_-L
  • 9,079
  • 2
  • 40
  • 37
4

Yes, there are numerous ways to do this, and besides gems you can directly manipulate with terminfo through gems for termios, ncurses or stty program.

tty_param = `stty -g`
system 'stty raw'

a = IO.read '/dev/stdin', 1

system "stty #{tty_param}"

print a
tensai_cirno
  • 914
  • 1
  • 7
  • 13
2

Use the Highline gem:

require "highline/system_extensions"  # gem install highline
include HighLine::SystemExtensions

print "Enter one character:  "
char = get_character
puts char.chr

from JEG II's blog.

fractious
  • 1,642
  • 16
  • 30
Phrogz
  • 296,393
  • 112
  • 651
  • 745