module KMonad.Args.Types
(
CfgToken(..)
, DefButton(..)
, ImplArnd(..)
, DefSetting(..)
, DefSettings
, DefAlias
, DefLayerSetting(..)
, DefLayer(..)
, DefSrc(..)
, KExpr(..)
, IToken(..)
, OToken(..)
, AsKExpr(..)
, AsDefSetting(..)
, HasDefSrc(..)
, AsDefLayerSetting(..)
) where
import KMonad.Prelude
import KMonad.Model.Button
import KMonad.Keyboard
import KMonad.Keyboard.IO
import KMonad.Util
data DefButton
= KRef Text
| KEmit Keycode
| KPressOnly Keycode
| KReleaseOnly Keycode
| KLayerToggle Text
| KLayerSwitch Text
| KLayerAdd Text
| KLayerRem Text
| KTapNext DefButton DefButton
| KTapHold Int DefButton DefButton
| KTapHoldNext Int DefButton DefButton (Maybe DefButton)
| KTapNextRelease DefButton DefButton
| KTapHoldNextRelease Int DefButton DefButton (Maybe DefButton)
| KTapNextPress DefButton DefButton
| KTapHoldNextPress Int DefButton DefButton (Maybe DefButton)
| KAroundNext DefButton
| KAroundNextSingle DefButton
| KMultiTap [(Int, DefButton)] DefButton
| KStepped [DefButton]
| KAround DefButton DefButton
| KAroundOnly DefButton DefButton
| KAroundWhenAlone DefButton DefButton
| KAroundImplicit DefButton DefButton
| KAroundNextTimeout Int DefButton DefButton
| KTapMacro [DefButton] (Maybe Int)
| KTapMacroRelease [DefButton] (Maybe Int)
| KComposeSeq [DefButton]
| KPause Milliseconds
| KLayerDelay Int LayerTag
| KLayerNext LayerTag
| KCommand Text (Maybe Text)
| KStickyKey Int DefButton
| KBeforeAfterNext DefButton DefButton
| KTrans
| KBlock
deriving (Int -> DefButton -> ShowS
[DefButton] -> ShowS
DefButton -> String
(Int -> DefButton -> ShowS)
-> (DefButton -> String)
-> ([DefButton] -> ShowS)
-> Show DefButton
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DefButton -> ShowS
showsPrec :: Int -> DefButton -> ShowS
$cshow :: DefButton -> String
show :: DefButton -> String
$cshowList :: [DefButton] -> ShowS
showList :: [DefButton] -> ShowS
Show, DefButton -> DefButton -> Bool
(DefButton -> DefButton -> Bool)
-> (DefButton -> DefButton -> Bool) -> Eq DefButton
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DefButton -> DefButton -> Bool
== :: DefButton -> DefButton -> Bool
$c/= :: DefButton -> DefButton -> Bool
/= :: DefButton -> DefButton -> Bool
Eq, Typeable, Typeable DefButton
Typeable DefButton =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DefButton -> c DefButton)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DefButton)
-> (DefButton -> Constr)
-> (DefButton -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c DefButton))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c DefButton))
-> ((forall b. Data b => b -> b) -> DefButton -> DefButton)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DefButton -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DefButton -> r)
-> (forall u. (forall d. Data d => d -> u) -> DefButton -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> DefButton -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> DefButton -> m DefButton)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DefButton -> m DefButton)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DefButton -> m DefButton)
-> Data DefButton
DefButton -> Constr
DefButton -> DataType
(forall b. Data b => b -> b) -> DefButton -> DefButton
forall a.
Typeable a =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> DefButton -> u
forall u. (forall d. Data d => d -> u) -> DefButton -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DefButton -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DefButton -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> DefButton -> m DefButton
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DefButton -> m DefButton
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DefButton
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DefButton -> c DefButton
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c DefButton)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c DefButton)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DefButton -> c DefButton
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DefButton -> c DefButton
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DefButton
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DefButton
$ctoConstr :: DefButton -> Constr
toConstr :: DefButton -> Constr
$cdataTypeOf :: DefButton -> DataType
dataTypeOf :: DefButton -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c DefButton)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c DefButton)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c DefButton)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c DefButton)
$cgmapT :: (forall b. Data b => b -> b) -> DefButton -> DefButton
gmapT :: (forall b. Data b => b -> b) -> DefButton -> DefButton
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DefButton -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DefButton -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DefButton -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DefButton -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> DefButton -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> DefButton -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> DefButton -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> DefButton -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> DefButton -> m DefButton
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> DefButton -> m DefButton
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DefButton -> m DefButton
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DefButton -> m DefButton
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DefButton -> m DefButton
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DefButton -> m DefButton
Data)
instance Plated DefButton
data ImplArnd
= IADisabled
| IAAround
| IAAroundOnly
| IAAroundWhenAlone
deriving (Int -> ImplArnd -> ShowS
[ImplArnd] -> ShowS
ImplArnd -> String
(Int -> ImplArnd -> ShowS)
-> (ImplArnd -> String) -> ([ImplArnd] -> ShowS) -> Show ImplArnd
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ImplArnd -> ShowS
showsPrec :: Int -> ImplArnd -> ShowS
$cshow :: ImplArnd -> String
show :: ImplArnd -> String
$cshowList :: [ImplArnd] -> ShowS
showList :: [ImplArnd] -> ShowS
Show, ImplArnd -> ImplArnd -> Bool
(ImplArnd -> ImplArnd -> Bool)
-> (ImplArnd -> ImplArnd -> Bool) -> Eq ImplArnd
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ImplArnd -> ImplArnd -> Bool
== :: ImplArnd -> ImplArnd -> Bool
$c/= :: ImplArnd -> ImplArnd -> Bool
/= :: ImplArnd -> ImplArnd -> Bool
Eq)
data CfgToken = CfgToken
{ CfgToken -> LogFunc -> IO (Acquire KeySource)
_src :: LogFunc -> IO (Acquire KeySource)
, CfgToken -> LogFunc -> IO (Acquire KeySink)
_snk :: LogFunc -> IO (Acquire KeySink)
, CfgToken -> LMap Button
_km :: LMap Button
, CfgToken -> Text
_fstL :: LayerTag
, CfgToken -> Bool
_flt :: Bool
, CfgToken -> Bool
_allow :: Bool
, CfgToken -> Maybe Int
_ksd :: Maybe Int
}
makeClassy ''CfgToken
data DefSrc = DefSrc
{ DefSrc -> Maybe Text
_srcName :: Maybe Text
, DefSrc -> [Keycode]
_keycodes :: [Keycode]
}
deriving (Int -> DefSrc -> ShowS
[DefSrc] -> ShowS
DefSrc -> String
(Int -> DefSrc -> ShowS)
-> (DefSrc -> String) -> ([DefSrc] -> ShowS) -> Show DefSrc
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DefSrc -> ShowS
showsPrec :: Int -> DefSrc -> ShowS
$cshow :: DefSrc -> String
show :: DefSrc -> String
$cshowList :: [DefSrc] -> ShowS
showList :: [DefSrc] -> ShowS
Show, DefSrc -> DefSrc -> Bool
(DefSrc -> DefSrc -> Bool)
-> (DefSrc -> DefSrc -> Bool) -> Eq DefSrc
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DefSrc -> DefSrc -> Bool
== :: DefSrc -> DefSrc -> Bool
$c/= :: DefSrc -> DefSrc -> Bool
/= :: DefSrc -> DefSrc -> Bool
Eq)
makeClassy ''DefSrc
type DefAlias = [(Text, DefButton)]
data DefLayerSetting
= LSrcName Text
| LImplArnd ImplArnd
| LButton DefButton
deriving (Int -> DefLayerSetting -> ShowS
[DefLayerSetting] -> ShowS
DefLayerSetting -> String
(Int -> DefLayerSetting -> ShowS)
-> (DefLayerSetting -> String)
-> ([DefLayerSetting] -> ShowS)
-> Show DefLayerSetting
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DefLayerSetting -> ShowS
showsPrec :: Int -> DefLayerSetting -> ShowS
$cshow :: DefLayerSetting -> String
show :: DefLayerSetting -> String
$cshowList :: [DefLayerSetting] -> ShowS
showList :: [DefLayerSetting] -> ShowS
Show, DefLayerSetting -> DefLayerSetting -> Bool
(DefLayerSetting -> DefLayerSetting -> Bool)
-> (DefLayerSetting -> DefLayerSetting -> Bool)
-> Eq DefLayerSetting
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DefLayerSetting -> DefLayerSetting -> Bool
== :: DefLayerSetting -> DefLayerSetting -> Bool
$c/= :: DefLayerSetting -> DefLayerSetting -> Bool
/= :: DefLayerSetting -> DefLayerSetting -> Bool
Eq)
makeClassyPrisms ''DefLayerSetting
data DefLayer = DefLayer
{ DefLayer -> Text
_layerName :: Text
, DefLayer -> [DefLayerSetting]
_layerSettings :: [DefLayerSetting]
}
deriving (Int -> DefLayer -> ShowS
[DefLayer] -> ShowS
DefLayer -> String
(Int -> DefLayer -> ShowS)
-> (DefLayer -> String) -> ([DefLayer] -> ShowS) -> Show DefLayer
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DefLayer -> ShowS
showsPrec :: Int -> DefLayer -> ShowS
$cshow :: DefLayer -> String
show :: DefLayer -> String
$cshowList :: [DefLayer] -> ShowS
showList :: [DefLayer] -> ShowS
Show, DefLayer -> DefLayer -> Bool
(DefLayer -> DefLayer -> Bool)
-> (DefLayer -> DefLayer -> Bool) -> Eq DefLayer
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DefLayer -> DefLayer -> Bool
== :: DefLayer -> DefLayer -> Bool
$c/= :: DefLayer -> DefLayer -> Bool
/= :: DefLayer -> DefLayer -> Bool
Eq)
data IToken
= KDeviceSource FilePath
| KLowLevelHookSource
| KIOKitSource (Maybe Text)
deriving (Int -> IToken -> ShowS
[IToken] -> ShowS
IToken -> String
(Int -> IToken -> ShowS)
-> (IToken -> String) -> ([IToken] -> ShowS) -> Show IToken
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> IToken -> ShowS
showsPrec :: Int -> IToken -> ShowS
$cshow :: IToken -> String
show :: IToken -> String
$cshowList :: [IToken] -> ShowS
showList :: [IToken] -> ShowS
Show)
data OToken
= KUinputSink Text (Maybe Text)
| KSendEventSink (Maybe (Int, Int))
| KKextSink
deriving (Int -> OToken -> ShowS
[OToken] -> ShowS
OToken -> String
(Int -> OToken -> ShowS)
-> (OToken -> String) -> ([OToken] -> ShowS) -> Show OToken
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> OToken -> ShowS
showsPrec :: Int -> OToken -> ShowS
$cshow :: OToken -> String
show :: OToken -> String
$cshowList :: [OToken] -> ShowS
showList :: [OToken] -> ShowS
Show)
data DefSetting
= SIToken IToken
| SOToken OToken
| SCmpSeq DefButton
| SFallThrough Bool
| SAllowCmd Bool
| SCmpSeqDelay Int
| SKeySeqDelay Int
| SImplArnd ImplArnd
deriving (Int -> DefSetting -> ShowS
[DefSetting] -> ShowS
DefSetting -> String
(Int -> DefSetting -> ShowS)
-> (DefSetting -> String)
-> ([DefSetting] -> ShowS)
-> Show DefSetting
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DefSetting -> ShowS
showsPrec :: Int -> DefSetting -> ShowS
$cshow :: DefSetting -> String
show :: DefSetting -> String
$cshowList :: [DefSetting] -> ShowS
showList :: [DefSetting] -> ShowS
Show)
makeClassyPrisms ''DefSetting
instance Eq DefSetting where
SIToken{} == :: DefSetting -> DefSetting -> Bool
== SIToken{} = Bool
True
SOToken{} == SOToken{} = Bool
True
SCmpSeq{} == SCmpSeq{} = Bool
True
SFallThrough{} == SFallThrough{} = Bool
True
SAllowCmd{} == SAllowCmd{} = Bool
True
SImplArnd{} == SImplArnd{} = Bool
True
SCmpSeqDelay{} == SCmpSeqDelay{} = Bool
True
SKeySeqDelay{} == SKeySeqDelay{} = Bool
True
DefSetting
_ == DefSetting
_ = Bool
False
type DefSettings = [DefSetting]
data KExpr
= KDefCfg DefSettings
| KDefSrc DefSrc
| KDefLayer DefLayer
| KDefAlias DefAlias
deriving (Int -> KExpr -> ShowS
[KExpr] -> ShowS
KExpr -> String
(Int -> KExpr -> ShowS)
-> (KExpr -> String) -> ([KExpr] -> ShowS) -> Show KExpr
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> KExpr -> ShowS
showsPrec :: Int -> KExpr -> ShowS
$cshow :: KExpr -> String
show :: KExpr -> String
$cshowList :: [KExpr] -> ShowS
showList :: [KExpr] -> ShowS
Show, KExpr -> KExpr -> Bool
(KExpr -> KExpr -> Bool) -> (KExpr -> KExpr -> Bool) -> Eq KExpr
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: KExpr -> KExpr -> Bool
== :: KExpr -> KExpr -> Bool
$c/= :: KExpr -> KExpr -> Bool
/= :: KExpr -> KExpr -> Bool
Eq)
makeClassyPrisms ''KExpr