module WildBind.Task.X11.Seq.Example
where
import Data.Monoid ((<>))
import WildBind (Binding, wildBind, binds, on, run)
import WildBind.Seq
( SeqBinding,
prefix, fromSeq, toSeq, withCancel, withPrefix
)
import WildBind.X11
( XKeyEvent, ActiveWindow,
withFrontEnd, ctrl, press
)
import qualified WildBind.X11.KeySym as Sym
main :: IO ()
main = withFrontEnd $ wildBind myBinding_simple
myBinding_simple :: Binding ActiveWindow XKeyEvent
myBinding_simple = prefix [ctrl Sym.xK_g] [ctrl Sym.xK_x] $ binds $ do
on (ctrl Sym.xK_f) `run` putStrLn "C-x C-f"
on (ctrl Sym.xK_o) `run` putStrLn "C-x C-o"
on (ctrl Sym.xK_c) `run` putStrLn "C-x C-c"
myBinding_complex :: Binding ActiveWindow XKeyEvent
myBinding_complex = fromSeq $ withCancel [ctrl Sym.xK_g] seq_binding
where
seq_binding :: SeqBinding ActiveWindow XKeyEvent
seq_binding = (withPrefix [ctrl Sym.xK_c] c_binding)
<> (withPrefix [ctrl Sym.xK_x] x_binding)
c_binding :: SeqBinding ActiveWindow XKeyEvent
c_binding = toSeq $ binds $ do
on (ctrl Sym.xK_n) `run` putStrLn "C-c C-n"
on (ctrl Sym.xK_p) `run` putStrLn "C-c C-p"
x_binding :: SeqBinding ActiveWindow XKeyEvent
x_binding = (withPrefix [ctrl Sym.xK_Return] xret_binding)
<> plain_x_binding
plain_x_binding :: SeqBinding ActiveWindow XKeyEvent
plain_x_binding = toSeq $ binds $ do
on (ctrl Sym.xK_f) `run` putStrLn "C-x C-f"
xret_binding :: SeqBinding ActiveWindow XKeyEvent
xret_binding = toSeq $ binds $ do
on (press Sym.xK_f) `run` putStrLn "C-x RET f"
on (press Sym.xK_c) `run` putStrLn "C-x RET c"