23

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

Phrogz
  • 284,740
  • 104
  • 634
  • 722
Sławosz
  • 10,717
  • 11
  • 68
  • 103

3 Answers3

66

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
  • 8,991
  • 2
  • 39
  • 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
  • 854
  • 1
  • 7
  • 13
1

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,612
  • 15
  • 30
Phrogz
  • 284,740
  • 104
  • 634
  • 722