In message <s92d498c.016 / email1.cuna.com>
DDouthitt / cuna.com writes:

> I would have expected output to look like this:
> 
> # ./test.rb
> 59
> #
> 
> That is - no echo, instant response, no carriage return needed - or
> put another way, just as if you used "getc" (crunch!).
> 
> Can someone straighten me out here?

That's caused by terminal driver.  Not ruby's bug.  In general unix
like systems do line buffering for tty input, that is, an input string
is not passed to a program until a newline is entered.  Same for echo.

So if you want to get your desired result, you need to 1) disable
kernel buffering and 2) disable echo.  Of course you should restore
tty settings on an exit of your program.


For example:

    # get current tty settings.
    s = File.popen("stty -g")

    # set tty mode 'raw', which implies no echo, no buffering and more.
    system("stty raw")

    p $<.getc

    # restore tty settings.
    system("stty #{s}")'

NOTE: This code fragment is not for a real program but a experiment.
      You should study curses module or termios/termio/sgtty ioctl to
      achieve your purpose.

-- 
kjana / os.xaxon.ne.jp                                   May 26, 2000
Haste makes waste.