
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