Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Single character input without pressing 'Enter'

1 view
Skip to first unread message

unni.tallman

unread,
Sep 19, 2006, 11:43:27 PM9/19/06
to
how can i read input from stdin, char by char, i want to get the
character as soon as it is entered, without having to press 'Enter'
after each character.

Nguyen Huu Bach

unread,
Sep 19, 2006, 11:55:06 PM9/19/06
to
This is a simple way to achieve that. Maybe there are others

def read_char
system "stty raw -echo"
STDIN.getc
ensure
system "stty -raw echo"
end

good luck

Eero Saynatkari

unread,
Sep 20, 2006, 12:33:45 AM9/20/06
to
Nguyen Huu Bach wrote:
> This is a simple way to achieve that. Maybe there are others
>
> def read_char
# Save previous state
old = `stty -g`

> system "stty raw -echo"
> STDIN.getc
> ensure
system "stty #{old}"
> end
>
> good luck

Might be better to use Termios or Curses, though.

--
Posted via http://www.ruby-forum.com/.

James Edward Gray II

unread,
Sep 20, 2006, 8:56:17 AM9/20/06
to
On Sep 19, 2006, at 11:33 PM, Eero Saynatkari wrote:

> Nguyen Huu Bach wrote:
>> This is a simple way to achieve that. Maybe there are others
>>
>> def read_char
> # Save previous state
> old = `stty -g`
>> system "stty raw -echo"
>> STDIN.getc
>> ensure
> system "stty #{old}"
>> end
>>
>> good luck
>
> Might be better to use Termios or Curses, though.

Or use HighLine which handles all these details for you.

James Edward Gray II

Jeffrey Schwab

unread,
Sep 20, 2006, 9:57:11 AM9/20/06
to
> unni.tallman wrote:
>> how can i read input from stdin, char by char, i want to get the
>> character as soon as it is entered, without having to press 'Enter'
>> after each character.

Nguyen Huu Bach wrote:

> def read_char
> system "stty raw -echo" STDIN.getc ensure system "stty -raw echo"
> end

Won't work on Windows.

The sooner everybody on Earth to switches to *nix, the sooner we can
stop worrying about these silly little differences. :)

0 new messages