-- | -- Module: WildBind.Task.X11.Seq.Example -- Description: An example of WildBind.Seq -- Maintainer: Toshio Ito -- -- This is an example of using "WildBind.Seq" module to build bindings -- for key sequences. See the source. -- -- @since 0.2.0.0 module WildBind.Task.X11.Seq.Example where import Data.Monoid ((<>)) -- Following is from wild-bind package import WildBind (Binding, wildBind, binds, on, run) import WildBind.Seq ( SeqBinding, prefix, fromSeq, toSeq, withCancel, withPrefix ) -- Following is from wild-bind-x11 package import WildBind.X11 ( XKeyEvent, ActiveWindow, withFrontEnd, ctrl, press ) import qualified WildBind.X11.KeySym as Sym main :: IO () main = withFrontEnd $ wildBind myBinding_simple -- | 'prefix' is a simple API to build a binding for key sequence. 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" -- | You can combine 'SeqBinding' objects together to build a complex -- binding for key sequence. 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"