From: William James Date: 2007-08-26T07:00:06+09:00 Subject: Re: Newbie questions On Aug 25, 3:05 pm, "Barr, Keith" wrote: > Hi there, > > I am new to using Ruby and I am writing my first real > programs and I have something I was wonndering about: > > I have a menu that I would like users to respond to > simply by entering a single character. I have tried > both STDIN.getc and gets, but both require a carriage > return. Is there a command I haven't found that will > actively read STDIN to process a single character as > soon as it is entered? if RUBY_PLATFORM =~ /win32/ require 'Win32API' Kbhit = Win32API.new("msvcrt", "_kbhit", [], 'I') Getch = Win32API.new("msvcrt", "_getch", [], 'I') def getkey sleep 0.01 return nil if Kbhit.call.zero? c = Getch.call c = Getch.call + 256 if c.zero? || c == 0xE0 c end else def getkey select( [$stdin], nil, nil, 0.01 ) ? c = $stdin.getc : c = nil end end 5.times{ begin end until key = getkey print key.chr }