On Sunday 25 June 2006 21:41, Øystein Johansen wrote: > Tor Lillqvist wrote: [snip] > > Ah, I forgot to answer this part. I am afraid you might run into > > difficulty in doing this on Win32. > > > > Or maybe it isn't that hard? There is an API SetConsoleMode(), and > > mode bits like "ENABLE_ECHO_INPUT" and "ENABLE_LINE_INPUT", so maybe > > it's actually quite similar to Unix, and you can do > > character-at-a-time input, and your own echo processing. Maybe all you > > need to do is something like > > > > GetConsoleMode (GetStdHandle (STD_INPUT_HANDLE), &mode); > > mode &= ~(ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT); > > SetConsoleMode (GetStdHandle (STD_INPUT_HANDLE), mode); > > > > and it will Just Work? > > Wow! I just tried this, and it does indeed Just Work! Thanks. I must > handle all the characters like backspace and return and so on, but it > works... > > But, it doesn't work on linux.... How can I get character-at-a-time > input from a linux console? If you are not using an event based toolkit such as GDK/GTK+ for handling the keyboard, then you will have to code on a platform specific basis. If you want to code for a Linux/Unix console and you are using the glib main loop then the easiest thing is to use curses with non-blocking input (see the cbreak() and nodelay() calls) and poll it in a timer event you have set up with g_timeout_add(). If you are feeling adventurous you can dispense with curses and use the termios/tcgetattr()/tcsetattr() interface directly and set up the console that way. If you have no other reason to use the glib main loop (and there are plenty of reasons why you might want to use it), you can make your own program loop with select() and an appropriate timeout which polls the keyboard; or if all you are interested in is keyboard events, you can put curses in single extraction (cbreak) mode but with blocking input (or the equivalent with termios) and use that as your event loop. Chris _______________________________________________ gtk-list@xxxxxxxxx http://mail.gnome.org/mailman/listinfo/gtk-list