On Wed, Nov 08, 2006, Michael W. Ryder wrote: >> I'm trying to learn the Ncurses module. However, nonblocking getch() >> doesn't work. A simple test case: >> -->-- >> #!/usr/bin/env ruby >> require 'ncurses' >> Ncurses.initscr >> Ncurses.start_color >> Ncurses.noecho >> Ncurses.cbreak >> Ncurses.noraw >> Ncurses.stdscr.nodelay(true) >> Ncurses.stdscr.keypad(true) >> Ncurses.refresh >> while ch = Ncurses.getch >> Ncurses.printw ch.to_s >> Ncurses.refresh >> end >> --<-- >> prints '10' every time no characters are in the buffer. There's no >> constant defined to be a '10' in both ncurses.h and the Ruby wrapper. >> According to getch(3), it's supposed to return an 'ERR' constant, being >> '-1'. It, however, returns '10' for some reason. > Isn't 10 an ASCII CR (or is it LF)? It is. However, the Return key isn't pressed at the time. Besides, I found a bug in the standard Curses module: macro wrapping the return value of getch() treats it as an unsigned integer. /* def getch */ static VALUE curses_getch(obj) VALUE obj; { rb_read_check(stdin); curses_stdscr(); return UINT2NUM(getch()); ~~~~~~~~ } For the value of EOF (-1, as present in ncurses), it wraps around. Where should I report it?