packages feed

termbox-1.0.0: src/Termbox/Internal/Key.hs

module Termbox.Internal.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 qualified Termbox.Bindings.Hs

-- | A key event.
--
-- Some distinct key sequences map to the same key event. For example, to a @termbox@ program, @Enter@ is
-- indistinguishable from @Ctrl+M@. Pattern synonyms below are provided for an alternate syntax in these cases, if
-- desired.
data Key
  = KeyChar Char
  | KeyArrowDown
  | KeyArrowLeft
  | KeyArrowRight
  | KeyArrowUp
  | KeyBackspace
  | -- | Also 'KeyCtrlH'
    KeyCtrlBackspace
  | KeyCtrl6
  | KeyCtrl8
  | KeyCtrlA
  | KeyCtrlB
  | -- | Also 'KeyCtrl4'
    KeyCtrlBackslash
  | KeyCtrlC
  | KeyCtrlD
  | KeyCtrlE
  | KeyCtrlF
  | KeyCtrlG
  | KeyCtrlJ
  | KeyCtrlK
  | KeyCtrlL
  | KeyCtrlN
  | KeyCtrlO
  | KeyCtrlP
  | KeyCtrlQ
  | KeyCtrlR
  | -- | Also 'KeyCtrl5'
    KeyCtrlRsqBracket
  | KeyCtrlS
  | -- | Also 'KeyCtrl7', 'KeyCtrlUnderscore'
    KeyCtrlSlash
  | -- | Also 'KeyCtrl2'
    KeyCtrlTilde
  | KeyCtrlT
  | KeyCtrlU
  | KeyCtrlV
  | KeyCtrlW
  | KeyCtrlX
  | KeyCtrlY
  | KeyCtrlZ
  | KeyDelete
  | KeyEnd
  | -- | Also 'KeyCtrlM'
    KeyEnter
  | -- | Also 'KeyCtrlLsqBracket', 'KeyCtrl3'
    KeyEsc
  | KeyF1
  | KeyF10
  | KeyF11
  | KeyF12
  | KeyF2
  | KeyF3
  | KeyF4
  | KeyF5
  | KeyF6
  | KeyF7
  | KeyF8
  | KeyF9
  | KeyHome
  | KeyInsert
  | KeyPageDn
  | KeyPageUp
  | KeySpace
  | -- | Also 'KeyCtrlI'
    KeyTab
  deriving stock (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 :: Termbox.Bindings.Hs.Tb_key -> Key
parseKey = \case
  Termbox.Bindings.Hs.TB_KEY_ARROW_DOWN -> KeyArrowDown
  Termbox.Bindings.Hs.TB_KEY_ARROW_LEFT -> KeyArrowLeft
  Termbox.Bindings.Hs.TB_KEY_ARROW_RIGHT -> KeyArrowRight
  Termbox.Bindings.Hs.TB_KEY_ARROW_UP -> KeyArrowUp
  Termbox.Bindings.Hs.TB_KEY_BACKSPACE -> KeyBackspace
  Termbox.Bindings.Hs.TB_KEY_CTRL_TILDE -> KeyCtrlTilde
  Termbox.Bindings.Hs.TB_KEY_CTRL_6 -> KeyCtrl6
  Termbox.Bindings.Hs.TB_KEY_CTRL_8 -> KeyCtrl8
  Termbox.Bindings.Hs.TB_KEY_CTRL_A -> KeyCtrlA
  Termbox.Bindings.Hs.TB_KEY_CTRL_B -> KeyCtrlB
  Termbox.Bindings.Hs.TB_KEY_CTRL_BACKSLASH -> KeyCtrlBackslash
  Termbox.Bindings.Hs.TB_KEY_CTRL_C -> KeyCtrlC
  Termbox.Bindings.Hs.TB_KEY_CTRL_D -> KeyCtrlD
  Termbox.Bindings.Hs.TB_KEY_CTRL_E -> KeyCtrlE
  Termbox.Bindings.Hs.TB_KEY_CTRL_F -> KeyCtrlF
  Termbox.Bindings.Hs.TB_KEY_CTRL_G -> KeyCtrlG
  Termbox.Bindings.Hs.TB_KEY_CTRL_H -> KeyCtrlBackspace
  Termbox.Bindings.Hs.TB_KEY_CTRL_J -> KeyCtrlJ
  Termbox.Bindings.Hs.TB_KEY_CTRL_K -> KeyCtrlK
  Termbox.Bindings.Hs.TB_KEY_CTRL_L -> KeyCtrlL
  Termbox.Bindings.Hs.TB_KEY_CTRL_N -> KeyCtrlN
  Termbox.Bindings.Hs.TB_KEY_CTRL_O -> KeyCtrlO
  Termbox.Bindings.Hs.TB_KEY_CTRL_P -> KeyCtrlP
  Termbox.Bindings.Hs.TB_KEY_CTRL_Q -> KeyCtrlQ
  Termbox.Bindings.Hs.TB_KEY_CTRL_R -> KeyCtrlR
  Termbox.Bindings.Hs.TB_KEY_CTRL_RSQ_BRACKET -> KeyCtrlRsqBracket
  Termbox.Bindings.Hs.TB_KEY_CTRL_S -> KeyCtrlS
  Termbox.Bindings.Hs.TB_KEY_CTRL_SLASH -> KeyCtrlSlash
  Termbox.Bindings.Hs.TB_KEY_CTRL_T -> KeyCtrlT
  Termbox.Bindings.Hs.TB_KEY_CTRL_U -> KeyCtrlU
  Termbox.Bindings.Hs.TB_KEY_CTRL_V -> KeyCtrlV
  Termbox.Bindings.Hs.TB_KEY_CTRL_W -> KeyCtrlW
  Termbox.Bindings.Hs.TB_KEY_CTRL_X -> KeyCtrlX
  Termbox.Bindings.Hs.TB_KEY_CTRL_Y -> KeyCtrlY
  Termbox.Bindings.Hs.TB_KEY_CTRL_Z -> KeyCtrlZ
  Termbox.Bindings.Hs.TB_KEY_DELETE -> KeyDelete
  Termbox.Bindings.Hs.TB_KEY_END -> KeyEnd
  Termbox.Bindings.Hs.TB_KEY_ENTER -> KeyEnter
  Termbox.Bindings.Hs.TB_KEY_ESC -> KeyEsc
  Termbox.Bindings.Hs.TB_KEY_F1 -> KeyF1
  Termbox.Bindings.Hs.TB_KEY_F10 -> KeyF10
  Termbox.Bindings.Hs.TB_KEY_F11 -> KeyF11
  Termbox.Bindings.Hs.TB_KEY_F12 -> KeyF12
  Termbox.Bindings.Hs.TB_KEY_F2 -> KeyF2
  Termbox.Bindings.Hs.TB_KEY_F3 -> KeyF3
  Termbox.Bindings.Hs.TB_KEY_F4 -> KeyF4
  Termbox.Bindings.Hs.TB_KEY_F5 -> KeyF5
  Termbox.Bindings.Hs.TB_KEY_F6 -> KeyF6
  Termbox.Bindings.Hs.TB_KEY_F7 -> KeyF7
  Termbox.Bindings.Hs.TB_KEY_F8 -> KeyF8
  Termbox.Bindings.Hs.TB_KEY_F9 -> KeyF9
  Termbox.Bindings.Hs.TB_KEY_HOME -> KeyHome
  Termbox.Bindings.Hs.TB_KEY_INSERT -> KeyInsert
  Termbox.Bindings.Hs.TB_KEY_PGDN -> KeyPageDn
  Termbox.Bindings.Hs.TB_KEY_PGUP -> KeyPageUp
  Termbox.Bindings.Hs.TB_KEY_SPACE -> KeySpace
  Termbox.Bindings.Hs.TB_KEY_TAB -> KeyTab
  key -> error ("unknown key: " ++ show key)