Joel Reymont wrote: > > This should be enough reason to scan for keyboard events instead. > > There is no guarantee that SIGINT would be sent only by keyboard. > > import System.Posix.Signals > > main = > do installHandler sigINT Ignore Nothing > x <- getChar > if x == '\ETX' > then do print "Gotcha!" > else do print "Try again!" > main > > This does not work for ^C. Can it actually be done? Of course I can > just read "q" but that would be too simple :-).
You have to put the terminal into "raw" mode to be able to read any character which is normally processed by the TTY driver, e.g.: import System.Posix.Terminal atts <- getTerminalAttributes (handleToFd stdin) let atts' = withoutMode atts ProcessInput setTerminalAttributes (handleToFd stdin) atts' Immediately This disables all input processing, e.g. line-editing and CR->LF translation (i.e. pressing the Enter/Return key will result in CR, not LF). Remember to set it back before exiting. -- Glynn Clements <[EMAIL PROTECTED]> _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe