{-# Language DeriveGeneric #-} {-# Language StrictData #-} module Graphics.Vty.Input.Events ( Key(..) , Modifier(..) , Event(..) , Button(..) , ClassifyMap , InternalEvent(..) ) where import Control.DeepSeq import Data.ByteString import GHC.Generics -- | 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 {-# UNPACK #-} Char | KBS | KEnter | KLeft | KRight | KUp | KDown | KUpLeft | KUpRight | KDownLeft | KDownRight | KCenter | KFun {-# UNPACK #-} Int | KBackTab | KPrtScr | KPause | KIns | KHome | KPageUp | KDel | KEnd | KPageDown | KBegin | KMenu deriving (Eq, Show, Read, Ord, Generic) instance NFData Key -- | 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, Generic) instance NFData Modifier -- | Mouse buttons. data Button = BLeft | BMiddle | BRight | BScrollUp | BScrollDown deriving (Eq, Show, Read, Ord, Generic) instance NFData Button -- | Events. data Event = EvKey Key [Modifier] -- ^ A keyboard key was pressed with the specified modifiers. | EvMouseDown Int Int Button [Modifier] -- ^ A mouse button was pressed at the specified column and row. Any -- modifiers available in the event are also provided. | EvMouseUp Int Int (Maybe Button) -- ^ A mouse button was released at the specified column and -- row. Some terminals report only that a button was released -- without specifying which one; in that case, Nothing is provided. -- Otherwise Just the button released is included in the event. | EvResize Int Int -- The terminal window was resized and the size is provided in the -- integer fields (width, height). | EvPaste ByteString -- ^ A paste event occurs when a bracketed paste input sequence is -- received. For terminals that support bracketed paste mode, these -- events will be triggered on a paste event. Terminals that do not -- support bracketed pastes will send the paste contents as ordinary -- input (which is probably bad, so beware!) Note that the data is -- provided in raw form and you'll have to decode (e.g. as UTF-8) if -- that's what your application expects. | EvLostFocus -- ^ The terminal running the application lost input focus. | EvGainedFocus -- ^ The terminal running the application gained input focus. deriving (Eq, Show, Read, Ord, Generic) instance NFData Event type ClassifyMap = [(String,Event)] -- | The type of internal events that drive the internal Vty event -- dispatching to the application. data InternalEvent = ResumeAfterInterrupt -- ^ Vty resumed operation after the process was interrupted (e.g. -- with a signal). In practice this translates into a screen redraw -- in the input event loop. | InputEvent Event -- ^ An input event was received.