chiasma-0.12.2.0: lib/Chiasma/Data/SendKeysParams.hs
module Chiasma.Data.SendKeysParams where
import qualified Data.Text as Text
import Exon (exon)
import Prelude hiding (repeat)
import Chiasma.Class.CmdArgs (CmdArgs (cmdArgs), flag1, optionWith)
import Chiasma.Data.Target (Target)
escape :: Text -> Text
escape fragment =
[exon|"#{escapeQuotes}"|]
where
escapeQuotes =
Text.replace [exon|"|] [exon|\"|] fragment
data Key =
Key Text
|
Lit Text
deriving stock (Eq, Show)
instance IsString Key where
fromString =
Lit . toText
instance CmdArgs Key where
cmdArgs = \case
Key k -> [k]
Lit s -> [escape s]
data SendKeysParams =
SendKeysParams {
enter :: Bool,
literal :: Bool,
hex :: Bool,
reset :: Bool,
mouse :: Bool,
copyMode :: Bool,
repeat :: Maybe Int,
keys :: [Key],
target :: Target
}
deriving stock (Eq, Show)
instance Default SendKeysParams where
def =
SendKeysParams {
enter = True,
literal = False,
hex = False,
reset = False,
mouse = False,
copyMode = False,
repeat = Nothing,
keys = mempty,
target = def
}
instance CmdArgs SendKeysParams where
cmdArgs SendKeysParams {..} =
flag1 "-l" literal
<>
flag1 "-H" hex
<>
flag1 "-R" reset
<>
flag1 "-M" mouse
<>
flag1 "-X" copyMode
<>
optionWith "-N" show repeat
<>
cmdArgs target
<>
(cmdArgs =<< keys)
<>
flag1 "enter" (enter && not copyMode)