Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get single char from console immediately [duplicate]

Tags:

ruby

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

like image 233
Sławosz Avatar asked Nov 09 '11 22:11

Sławosz


3 Answers

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

like image 162
J-_-L Avatar answered Nov 11 '22 15:11

J-_-L


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
like image 27
tensai_cirno Avatar answered Nov 11 '22 15:11

tensai_cirno


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.

like image 29
Phrogz Avatar answered Nov 11 '22 17:11

Phrogz