packages feed

hs-term-emulator-0.1.0.0: src/System/Terminal/Emulator/KeyboardInput.hs

module System.Terminal.Emulator.KeyboardInput
  ( KeyboardState (..),
    initialKeyboardState,
    KeyPress (..),
    KeyModifiers (..),
    SpecialKey (..),
  )
where

data KeyboardState = KeyboardState
  { keyboardState_DECCKM :: !Bool,
    -- | Set using Keyboard Action Mode (KAM)
    keyboardState_Locked :: !Bool,
    -- | Set using Automatic Newline / Normal Linefeed (LNM)
    keyboardState_CRLF :: !Bool
  }
  deriving (Show, Eq, Ord)

initialKeyboardState :: KeyboardState
initialKeyboardState =
  KeyboardState
    { keyboardState_DECCKM = False,
      keyboardState_Locked = False,
      keyboardState_CRLF = False
    }

data KeyPress
  = -- | The char must be a plain-old regular "visible" character (or ' ').
    -- Specifically, you should not put '\n' or '\b' (use 'SpecialKey' for
    -- that)
    KeyPress_Char !Char !KeyModifiers
  | -- | Used for a key press of a 'SpecialKey'. If a 'SpecialKey' doesn't
    -- exist (for example "Ctrl", or "CapsLock") then no 'KeyPress' event
    -- should be generated
    KeyPress_SpecialKey !SpecialKey !KeyModifiers
  deriving (Eq, Ord, Show)

data KeyModifiers = KeyModifiers
  { shift :: !Bool,
    ctrl :: !Bool,
    alt :: !Bool,
    capsLock :: !Bool
  }
  deriving (Eq, Ord, Show)

data SpecialKey
  = SpecialKey_Escape
  | SpecialKey_F1
  | SpecialKey_F2
  | SpecialKey_F3
  | SpecialKey_F4
  | SpecialKey_F5
  | SpecialKey_F6
  | SpecialKey_F7
  | SpecialKey_F8
  | SpecialKey_F9
  | SpecialKey_F10
  | SpecialKey_F11
  | SpecialKey_F12
  | SpecialKey_Insert
  | SpecialKey_Delete
  | SpecialKey_Home
  | SpecialKey_End
  | SpecialKey_PageUp
  | SpecialKey_PageDown
  | SpecialKey_Tab
  | SpecialKey_Enter
  | SpecialKey_Backspace
  | SpecialKey_ArrowLeft
  | SpecialKey_ArrowRight
  | SpecialKey_ArrowUp
  | SpecialKey_ArrowDown
  deriving (Eq, Ord, Show)