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 :: IO ()
main = (FrontEnd ActiveWindow XKeyEvent -> IO ()) -> IO ()
forall i a.
(XKeyInput i, Describable i, Ord i) =>
(FrontEnd ActiveWindow i -> IO a) -> IO a
withFrontEnd ((FrontEnd ActiveWindow XKeyEvent -> IO ()) -> IO ())
-> (FrontEnd ActiveWindow XKeyEvent -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ Binding ActiveWindow XKeyEvent
-> FrontEnd ActiveWindow XKeyEvent -> IO ()
forall i s. Ord i => Binding s i -> FrontEnd s i -> IO ()
wildBind Binding ActiveWindow XKeyEvent
myBinding_simple
myBinding_simple :: Binding ActiveWindow XKeyEvent
myBinding_simple :: Binding ActiveWindow XKeyEvent
myBinding_simple = [XKeyEvent]
-> [XKeyEvent]
-> Binding ActiveWindow XKeyEvent
-> Binding ActiveWindow XKeyEvent
forall i fs. Ord i => [i] -> [i] -> Binding fs i -> Binding fs i
prefix [KeySym -> XKeyEvent
forall k. ToXKeyEvent k => k -> XKeyEvent
ctrl KeySym
Sym.xK_g] [KeySym -> XKeyEvent
forall k. ToXKeyEvent k => k -> XKeyEvent
ctrl KeySym
Sym.xK_x] (Binding ActiveWindow XKeyEvent -> Binding ActiveWindow XKeyEvent)
-> Binding ActiveWindow XKeyEvent -> Binding ActiveWindow XKeyEvent
forall a b. (a -> b) -> a -> b
$ Binder XKeyEvent (Action IO ()) ()
-> Binding ActiveWindow XKeyEvent
forall i r a bs fs.
Ord i =>
Binder i (Action IO r) a -> Binding' bs fs i
binds (Binder XKeyEvent (Action IO ()) ()
-> Binding ActiveWindow XKeyEvent)
-> Binder XKeyEvent (Action IO ()) ()
-> Binding ActiveWindow XKeyEvent
forall a b. (a -> b) -> a -> b
$ do
XKeyEvent -> Action IO () -> Binder XKeyEvent (Action IO ()) ()
forall i v. i -> v -> Binder i v ()
on (KeySym -> XKeyEvent
forall k. ToXKeyEvent k => k -> XKeyEvent
ctrl KeySym
Sym.xK_f) (Action IO () -> Binder XKeyEvent (Action IO ()) ())
-> IO () -> Binder XKeyEvent (Action IO ()) ()
forall (m :: * -> *) b a.
Functor m =>
(Action m () -> b) -> m a -> b
`run` String -> IO ()
putStrLn String
"C-x C-f"
XKeyEvent -> Action IO () -> Binder XKeyEvent (Action IO ()) ()
forall i v. i -> v -> Binder i v ()
on (KeySym -> XKeyEvent
forall k. ToXKeyEvent k => k -> XKeyEvent
ctrl KeySym
Sym.xK_o) (Action IO () -> Binder XKeyEvent (Action IO ()) ())
-> IO () -> Binder XKeyEvent (Action IO ()) ()
forall (m :: * -> *) b a.
Functor m =>
(Action m () -> b) -> m a -> b
`run` String -> IO ()
putStrLn String
"C-x C-o"
XKeyEvent -> Action IO () -> Binder XKeyEvent (Action IO ()) ()
forall i v. i -> v -> Binder i v ()
on (KeySym -> XKeyEvent
forall k. ToXKeyEvent k => k -> XKeyEvent
ctrl KeySym
Sym.xK_c) (Action IO () -> Binder XKeyEvent (Action IO ()) ())
-> IO () -> Binder XKeyEvent (Action IO ()) ()
forall (m :: * -> *) b a.
Functor m =>
(Action m () -> b) -> m a -> b
`run` String -> IO ()
putStrLn String
"C-x C-c"
myBinding_complex :: Binding ActiveWindow XKeyEvent
myBinding_complex :: Binding ActiveWindow XKeyEvent
myBinding_complex = SeqBinding ActiveWindow XKeyEvent -> Binding ActiveWindow XKeyEvent
forall fs i. SeqBinding fs i -> Binding fs i
fromSeq (SeqBinding ActiveWindow XKeyEvent
-> Binding ActiveWindow XKeyEvent)
-> SeqBinding ActiveWindow XKeyEvent
-> Binding ActiveWindow XKeyEvent
forall a b. (a -> b) -> a -> b
$ [XKeyEvent]
-> SeqBinding ActiveWindow XKeyEvent
-> SeqBinding ActiveWindow XKeyEvent
forall i fs. Ord i => [i] -> SeqBinding fs i -> SeqBinding fs i
withCancel [KeySym -> XKeyEvent
forall k. ToXKeyEvent k => k -> XKeyEvent
ctrl KeySym
Sym.xK_g] SeqBinding ActiveWindow XKeyEvent
seq_binding
where
seq_binding :: SeqBinding ActiveWindow XKeyEvent
seq_binding :: SeqBinding ActiveWindow XKeyEvent
seq_binding = ([XKeyEvent]
-> SeqBinding ActiveWindow XKeyEvent
-> SeqBinding ActiveWindow XKeyEvent
forall i fs. Ord i => [i] -> SeqBinding fs i -> SeqBinding fs i
withPrefix [KeySym -> XKeyEvent
forall k. ToXKeyEvent k => k -> XKeyEvent
ctrl KeySym
Sym.xK_c] SeqBinding ActiveWindow XKeyEvent
c_binding)
SeqBinding ActiveWindow XKeyEvent
-> SeqBinding ActiveWindow XKeyEvent
-> SeqBinding ActiveWindow XKeyEvent
forall a. Semigroup a => a -> a -> a
<> ([XKeyEvent]
-> SeqBinding ActiveWindow XKeyEvent
-> SeqBinding ActiveWindow XKeyEvent
forall i fs. Ord i => [i] -> SeqBinding fs i -> SeqBinding fs i
withPrefix [KeySym -> XKeyEvent
forall k. ToXKeyEvent k => k -> XKeyEvent
ctrl KeySym
Sym.xK_x] SeqBinding ActiveWindow XKeyEvent
x_binding)
c_binding :: SeqBinding ActiveWindow XKeyEvent
c_binding :: SeqBinding ActiveWindow XKeyEvent
c_binding = Binding ActiveWindow XKeyEvent -> SeqBinding ActiveWindow XKeyEvent
forall i fs. Eq i => Binding fs i -> SeqBinding fs i
toSeq (Binding ActiveWindow XKeyEvent
-> SeqBinding ActiveWindow XKeyEvent)
-> Binding ActiveWindow XKeyEvent
-> SeqBinding ActiveWindow XKeyEvent
forall a b. (a -> b) -> a -> b
$ Binder XKeyEvent (Action IO ()) ()
-> Binding ActiveWindow XKeyEvent
forall i r a bs fs.
Ord i =>
Binder i (Action IO r) a -> Binding' bs fs i
binds (Binder XKeyEvent (Action IO ()) ()
-> Binding ActiveWindow XKeyEvent)
-> Binder XKeyEvent (Action IO ()) ()
-> Binding ActiveWindow XKeyEvent
forall a b. (a -> b) -> a -> b
$ do
XKeyEvent -> Action IO () -> Binder XKeyEvent (Action IO ()) ()
forall i v. i -> v -> Binder i v ()
on (KeySym -> XKeyEvent
forall k. ToXKeyEvent k => k -> XKeyEvent
ctrl KeySym
Sym.xK_n) (Action IO () -> Binder XKeyEvent (Action IO ()) ())
-> IO () -> Binder XKeyEvent (Action IO ()) ()
forall (m :: * -> *) b a.
Functor m =>
(Action m () -> b) -> m a -> b
`run` String -> IO ()
putStrLn String
"C-c C-n"
XKeyEvent -> Action IO () -> Binder XKeyEvent (Action IO ()) ()
forall i v. i -> v -> Binder i v ()
on (KeySym -> XKeyEvent
forall k. ToXKeyEvent k => k -> XKeyEvent
ctrl KeySym
Sym.xK_p) (Action IO () -> Binder XKeyEvent (Action IO ()) ())
-> IO () -> Binder XKeyEvent (Action IO ()) ()
forall (m :: * -> *) b a.
Functor m =>
(Action m () -> b) -> m a -> b
`run` String -> IO ()
putStrLn String
"C-c C-p"
x_binding :: SeqBinding ActiveWindow XKeyEvent
x_binding :: SeqBinding ActiveWindow XKeyEvent
x_binding = ([XKeyEvent]
-> SeqBinding ActiveWindow XKeyEvent
-> SeqBinding ActiveWindow XKeyEvent
forall i fs. Ord i => [i] -> SeqBinding fs i -> SeqBinding fs i
withPrefix [KeySym -> XKeyEvent
forall k. ToXKeyEvent k => k -> XKeyEvent
ctrl KeySym
Sym.xK_Return] SeqBinding ActiveWindow XKeyEvent
xret_binding)
SeqBinding ActiveWindow XKeyEvent
-> SeqBinding ActiveWindow XKeyEvent
-> SeqBinding ActiveWindow XKeyEvent
forall a. Semigroup a => a -> a -> a
<> SeqBinding ActiveWindow XKeyEvent
plain_x_binding
plain_x_binding :: SeqBinding ActiveWindow XKeyEvent
plain_x_binding :: SeqBinding ActiveWindow XKeyEvent
plain_x_binding = Binding ActiveWindow XKeyEvent -> SeqBinding ActiveWindow XKeyEvent
forall i fs. Eq i => Binding fs i -> SeqBinding fs i
toSeq (Binding ActiveWindow XKeyEvent
-> SeqBinding ActiveWindow XKeyEvent)
-> Binding ActiveWindow XKeyEvent
-> SeqBinding ActiveWindow XKeyEvent
forall a b. (a -> b) -> a -> b
$ Binder XKeyEvent (Action IO ()) ()
-> Binding ActiveWindow XKeyEvent
forall i r a bs fs.
Ord i =>
Binder i (Action IO r) a -> Binding' bs fs i
binds (Binder XKeyEvent (Action IO ()) ()
-> Binding ActiveWindow XKeyEvent)
-> Binder XKeyEvent (Action IO ()) ()
-> Binding ActiveWindow XKeyEvent
forall a b. (a -> b) -> a -> b
$ do
XKeyEvent -> Action IO () -> Binder XKeyEvent (Action IO ()) ()
forall i v. i -> v -> Binder i v ()
on (KeySym -> XKeyEvent
forall k. ToXKeyEvent k => k -> XKeyEvent
ctrl KeySym
Sym.xK_f) (Action IO () -> Binder XKeyEvent (Action IO ()) ())
-> IO () -> Binder XKeyEvent (Action IO ()) ()
forall (m :: * -> *) b a.
Functor m =>
(Action m () -> b) -> m a -> b
`run` String -> IO ()
putStrLn String
"C-x C-f"
xret_binding :: SeqBinding ActiveWindow XKeyEvent
xret_binding :: SeqBinding ActiveWindow XKeyEvent
xret_binding = Binding ActiveWindow XKeyEvent -> SeqBinding ActiveWindow XKeyEvent
forall i fs. Eq i => Binding fs i -> SeqBinding fs i
toSeq (Binding ActiveWindow XKeyEvent
-> SeqBinding ActiveWindow XKeyEvent)
-> Binding ActiveWindow XKeyEvent
-> SeqBinding ActiveWindow XKeyEvent
forall a b. (a -> b) -> a -> b
$ Binder XKeyEvent (Action IO ()) ()
-> Binding ActiveWindow XKeyEvent
forall i r a bs fs.
Ord i =>
Binder i (Action IO r) a -> Binding' bs fs i
binds (Binder XKeyEvent (Action IO ()) ()
-> Binding ActiveWindow XKeyEvent)
-> Binder XKeyEvent (Action IO ()) ()
-> Binding ActiveWindow XKeyEvent
forall a b. (a -> b) -> a -> b
$ do
XKeyEvent -> Action IO () -> Binder XKeyEvent (Action IO ()) ()
forall i v. i -> v -> Binder i v ()
on (KeySym -> XKeyEvent
forall k. ToXKeyEvent k => k -> XKeyEvent
press KeySym
Sym.xK_f) (Action IO () -> Binder XKeyEvent (Action IO ()) ())
-> IO () -> Binder XKeyEvent (Action IO ()) ()
forall (m :: * -> *) b a.
Functor m =>
(Action m () -> b) -> m a -> b
`run` String -> IO ()
putStrLn String
"C-x RET f"
XKeyEvent -> Action IO () -> Binder XKeyEvent (Action IO ()) ()
forall i v. i -> v -> Binder i v ()
on (KeySym -> XKeyEvent
forall k. ToXKeyEvent k => k -> XKeyEvent
press KeySym
Sym.xK_c) (Action IO () -> Binder XKeyEvent (Action IO ()) ())
-> IO () -> Binder XKeyEvent (Action IO ()) ()
forall (m :: * -> *) b a.
Functor m =>
(Action m () -> b) -> m a -> b
`run` String -> IO ()
putStrLn String
"C-x RET c"