    module Graphics.Vty.Input.Events where

    -- | Representations of non-modifier keys.
    --
    -- * KFun is indexed from 0 to 63. Range of supported FKeys varies by terminal and keyboard.
    --
    -- * KUpLeft, KUpRight, KDownLeft, KDownRight, KCenter support varies by terminal and keyboard.
    --
    -- * Actually, support for most of these but KEsc, KChar, KBS, and KEnter vary by terminal and
    -- keyboard.
    data Key = KEsc  | KChar Char | KBS | KEnter
             | KLeft | KRight | KUp | KDown
             | KUpLeft | KUpRight | KDownLeft | KDownRight | KCenter
             | KFun Int | KBackTab | KPrtScr | KPause | KIns
             | KHome | KPageUp | KDel | KEnd | KPageDown | KBegin | KMenu
        deriving (Eq,Show,Read,Ord)

    -- | Modifier keys.  Key codes are interpreted such that users are more likely to
    -- have Meta than Alt; for instance on the PC Linux console, 'MMeta' will
    -- generally correspond to the physical Alt key.
    data Modifier = MShift | MCtrl | MMeta | MAlt
        deriving (Eq,Show,Read,Ord)

    -- | Mouse buttons.
    --
    -- \todo not supported.
    data Button = BLeft | BMiddle | BRight
        deriving (Eq,Show,Ord)

    -- | Events.
    data Event
        = EvKey Key [Modifier]
        -- | \todo mouse events are not supported
        | EvMouse Int Int Button [Modifier]
        -- | if read from 'eventChannel' this is the size at the time of the signal. If read from
        -- 'nextEvent' this is the size at the time the event was processed by Vty. Typically these are
        -- the same, but if somebody is resizing the terminal quickly they can be different.
        | EvResize Int Int
        deriving (Eq,Show,Ord)

    type ClassifyMap = [(String,Event)]