module KMonad.Args.Types
(
Parser
, PErrors(..)
, CfgToken(..)
, DefButton(..)
, DefSetting(..)
, DefSettings
, DefAlias
, DefLayer(..)
, DefSrc
, KExpr(..)
, IToken(..)
, OToken(..)
, AsKExpr(..)
, AsDefSetting(..)
, module Text.Megaparsec
, module Text.Megaparsec.Char
) where
import KMonad.Prelude
import KMonad.Button
import KMonad.Keyboard
import KMonad.Keyboard.IO
import KMonad.Util
import Text.Megaparsec
import Text.Megaparsec.Char
type Parser = Parsec Void Text
newtype PErrors = PErrors (ParseErrorBundle Text Void)
instance Show PErrors where
show :: PErrors -> String
show (PErrors e :: ParseErrorBundle Text Void
e) = "Parse error at " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> ParseErrorBundle Text Void -> String
forall s e.
(Stream s, ShowErrorComponent e) =>
ParseErrorBundle s e -> String
errorBundlePretty ParseErrorBundle Text Void
e
instance Exception PErrors
data DefButton
= KRef Text
| KEmit Keycode
| KLayerToggle Text
| KLayerSwitch Text
| KLayerAdd Text
| KLayerRem Text
| KTapNext DefButton DefButton
| KTapHold Int DefButton DefButton
| KTapHoldNext Int DefButton DefButton
| KTapNextRelease DefButton DefButton
| KTapHoldNextRelease Int DefButton DefButton
| KAroundNext DefButton
| KMultiTap [(Int, DefButton)] DefButton
| KAround DefButton DefButton
| KTapMacro [DefButton]
| KComposeSeq [DefButton]
| KPause Milliseconds
| KLayerDelay Int LayerTag
| KLayerNext LayerTag
| KCommand Text
| 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
showList :: [DefButton] -> ShowS
$cshowList :: [DefButton] -> ShowS
show :: DefButton -> String
$cshow :: DefButton -> String
showsPrec :: Int -> DefButton -> ShowS
$cshowsPrec :: Int -> DefButton -> ShowS
Show
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
}
makeClassy ''CfgToken
type DefSrc = [Keycode]
type DefAlias = [(Text, DefButton)]
data DefLayer = DefLayer
{ DefLayer -> Text
_layerName :: Text
, DefLayer -> [DefButton]
_buttons :: [DefButton]
}
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
showList :: [DefLayer] -> ShowS
$cshowList :: [DefLayer] -> ShowS
show :: DefLayer -> String
$cshow :: DefLayer -> String
showsPrec :: Int -> DefLayer -> ShowS
$cshowsPrec :: Int -> DefLayer -> ShowS
Show
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
showList :: [IToken] -> ShowS
$cshowList :: [IToken] -> ShowS
show :: IToken -> String
$cshow :: IToken -> String
showsPrec :: Int -> IToken -> ShowS
$cshowsPrec :: Int -> IToken -> ShowS
Show
data OToken
= KUinputSink Text (Maybe Text)
| KSendEventSink
| 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
showList :: [OToken] -> ShowS
$cshowList :: [OToken] -> ShowS
show :: OToken -> String
$cshow :: OToken -> String
showsPrec :: Int -> OToken -> ShowS
$cshowsPrec :: Int -> OToken -> ShowS
Show
data DefSetting
= SIToken IToken
| SOToken OToken
| SCmpSeq DefButton
| SInitStr Text
| SFallThrough Bool
| SAllowCmd Bool
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
showList :: [DefSetting] -> ShowS
$cshowList :: [DefSetting] -> ShowS
show :: DefSetting -> String
$cshow :: DefSetting -> String
showsPrec :: Int -> DefSetting -> ShowS
$cshowsPrec :: Int -> DefSetting -> ShowS
Show
makeClassyPrisms ''DefSetting
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
showList :: [KExpr] -> ShowS
$cshowList :: [KExpr] -> ShowS
show :: KExpr -> String
$cshow :: KExpr -> String
showsPrec :: Int -> KExpr -> ShowS
$cshowsPrec :: Int -> KExpr -> ShowS
Show
makeClassyPrisms ''KExpr