{-# LANGUAGE PatternSynonyms #-} module Termbox.Key ( Key (..), parseKey, pattern KeyCtrlH, pattern KeyCtrlLsqBracket, pattern KeyCtrl2, pattern KeyCtrl3, pattern KeyCtrl4, pattern KeyCtrl5, pattern KeyCtrl7, pattern KeyCtrlM, pattern KeyCtrlI, pattern KeyCtrlUnderscore, ) where import Data.Word (Word16) import Termbox.Internal -- | A key event. data Key = KeyChar Char | KeyArrowDown | KeyArrowLeft | KeyArrowRight | KeyArrowUp | KeyBackspace | -- | Also: @Ctrl+H@ KeyCtrlBackspace | KeyCtrl6 | KeyCtrl8 | KeyCtrlA | KeyCtrlB | -- | Also: @Ctrl-4@ KeyCtrlBackslash | KeyCtrlC | KeyCtrlD | KeyCtrlE | KeyCtrlF | KeyCtrlG | KeyCtrlJ | KeyCtrlK | KeyCtrlL | KeyCtrlN | KeyCtrlO | KeyCtrlP | KeyCtrlQ | KeyCtrlR | -- | Also: @Ctrl-5@ KeyCtrlRsqBracket | KeyCtrlS | -- | Also: @Ctrl-/@, @Ctrl-_@ KeyCtrlSlash | -- | Also: @Ctrl+2@ KeyCtrlTilde | KeyCtrlT | KeyCtrlU | KeyCtrlV | KeyCtrlW | KeyCtrlX | KeyCtrlY | KeyCtrlZ | KeyDelete | KeyEnd | -- | Also: @Ctrl-M@ KeyEnter | -- | Also: @Ctrl-[@, @Ctrl-3@ KeyEsc | KeyF1 | KeyF10 | KeyF11 | KeyF12 | KeyF2 | KeyF3 | KeyF4 | KeyF5 | KeyF6 | KeyF7 | KeyF8 | KeyF9 | KeyHome | KeyInsert | KeyPageDn | KeyPageUp | KeySpace | -- | Also: @Ctrl+I@ KeyTab deriving (Eq, Ord, Show) pattern KeyCtrlH :: Key pattern KeyCtrlH = KeyCtrlBackspace pattern KeyCtrlLsqBracket :: Key pattern KeyCtrlLsqBracket = KeyEsc pattern KeyCtrl2 :: Key pattern KeyCtrl2 = KeyCtrlTilde pattern KeyCtrl3 :: Key pattern KeyCtrl3 = KeyEsc pattern KeyCtrl4 :: Key pattern KeyCtrl4 = KeyCtrlBackslash pattern KeyCtrl5 :: Key pattern KeyCtrl5 = KeyCtrlRsqBracket pattern KeyCtrl7 :: Key pattern KeyCtrl7 = KeyCtrlSlash pattern KeyCtrlM :: Key pattern KeyCtrlM = KeyEnter pattern KeyCtrlI :: Key pattern KeyCtrlI = KeyTab pattern KeyCtrlUnderscore :: Key pattern KeyCtrlUnderscore = KeyCtrlSlash parseKey :: Word16 -> Key parseKey key | key == tB_KEY_ARROW_DOWN = KeyArrowDown | key == tB_KEY_ARROW_LEFT = KeyArrowLeft | key == tB_KEY_ARROW_RIGHT = KeyArrowRight | key == tB_KEY_ARROW_UP = KeyArrowUp | key == tB_KEY_BACKSPACE = KeyBackspace | key == tB_KEY_CTRL_TILDE = KeyCtrlTilde | key == tB_KEY_CTRL_6 = KeyCtrl6 | key == tB_KEY_CTRL_8 = KeyCtrl8 | key == tB_KEY_CTRL_A = KeyCtrlA | key == tB_KEY_CTRL_B = KeyCtrlB | key == tB_KEY_CTRL_BACKSLASH = KeyCtrlBackslash | key == tB_KEY_CTRL_C = KeyCtrlC | key == tB_KEY_CTRL_D = KeyCtrlD | key == tB_KEY_CTRL_E = KeyCtrlE | key == tB_KEY_CTRL_F = KeyCtrlF | key == tB_KEY_CTRL_G = KeyCtrlG | key == tB_KEY_CTRL_H = KeyCtrlBackspace | key == tB_KEY_CTRL_J = KeyCtrlJ | key == tB_KEY_CTRL_K = KeyCtrlK | key == tB_KEY_CTRL_L = KeyCtrlL | key == tB_KEY_CTRL_N = KeyCtrlN | key == tB_KEY_CTRL_O = KeyCtrlO | key == tB_KEY_CTRL_P = KeyCtrlP | key == tB_KEY_CTRL_Q = KeyCtrlQ | key == tB_KEY_CTRL_R = KeyCtrlR | key == tB_KEY_CTRL_RSQ_BRACKET = KeyCtrlRsqBracket | key == tB_KEY_CTRL_S = KeyCtrlS | key == tB_KEY_CTRL_SLASH = KeyCtrlSlash | key == tB_KEY_CTRL_T = KeyCtrlT | key == tB_KEY_CTRL_U = KeyCtrlU | key == tB_KEY_CTRL_V = KeyCtrlV | key == tB_KEY_CTRL_W = KeyCtrlW | key == tB_KEY_CTRL_X = KeyCtrlX | key == tB_KEY_CTRL_Y = KeyCtrlY | key == tB_KEY_CTRL_Z = KeyCtrlZ | key == tB_KEY_DELETE = KeyDelete | key == tB_KEY_END = KeyEnd | key == tB_KEY_ENTER = KeyEnter | key == tB_KEY_ESC = KeyEsc | key == tB_KEY_F1 = KeyF1 | key == tB_KEY_F10 = KeyF10 | key == tB_KEY_F11 = KeyF11 | key == tB_KEY_F12 = KeyF12 | key == tB_KEY_F2 = KeyF2 | key == tB_KEY_F3 = KeyF3 | key == tB_KEY_F4 = KeyF4 | key == tB_KEY_F5 = KeyF5 | key == tB_KEY_F6 = KeyF6 | key == tB_KEY_F7 = KeyF7 | key == tB_KEY_F8 = KeyF8 | key == tB_KEY_F9 = KeyF9 | key == tB_KEY_HOME = KeyHome | key == tB_KEY_INSERT = KeyInsert | key == tB_KEY_PGDN = KeyPageDn | key == tB_KEY_PGUP = KeyPageUp | key == tB_KEY_SPACE = KeySpace | key == tB_KEY_TAB = KeyTab | otherwise = error ("termbox: unknown key " ++ show key)