diff options
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/quick-start.org | 67 | ||||
| -rw-r--r-- | doc/window-managers.org | 65 | 
2 files changed, 67 insertions, 65 deletions
| diff --git a/doc/quick-start.org b/doc/quick-start.org index d5bdb48..831f97c 100644 --- a/doc/quick-start.org +++ b/doc/quick-start.org @@ -465,68 +465,5 @@ available [[http://github.com/jaor/xmobar/raw/master/examples/xmobar.config][her    argument that denotes an initial delay, in tenths of a second,    before the command takes effect. -*** Example for using the DBus IPC interface with XMonad - -    Bind the key which should {,un}map xmobar to a dummy value. This is -    necessary for {,un}grabKey in xmonad. - -    #+begin_src haskell -      ((0, xK_Alt_L), pure ()) -    #+end_src - -    Also, install =avoidStruts= layout modifier from -    =XMonad.Hooks.ManageDocks= - -    Finally, install these two event hooks (=handleEventHook= in =XConfig=) -    =myDocksEventHook= is a replacement for =docksEventHook= which reacts -    on unmap events as well (which =docksEventHook= doesn't). - -    #+begin_src haskell -      import qualified XMonad.Util.ExtensibleState as XS - -      data DockToggleTime = DTT { lastTime :: Time } deriving (Eq, Show, Typeable) - -      instance ExtensionClass DockToggleTime where -          initialValue = DTT 0 - -      toggleDocksHook :: Int -> KeySym -> Event -> X All -      toggleDocksHook to ks ( KeyEvent { ev_event_display = d -                                      , ev_event_type    = et -                                      , ev_keycode       = ekc -                                      , ev_time          = etime -                                      } ) = -              io (keysymToKeycode d ks) >>= toggleDocks >> return (All True) -          where -          toggleDocks kc -              | ekc == kc && et == keyPress = do -                  safeSendSignal ["Reveal 0", "TogglePersistent"] -                  XS.put ( DTT etime ) -              | ekc == kc && et == keyRelease = do -                  gap <- XS.gets ( (-) etime . lastTime ) -                  safeSendSignal [ "TogglePersistent" -                              , "Hide " ++ show (if gap < 400 then to else 0) -                              ] -              | otherwise = return () - -          safeSendSignal s = catchX (io $ sendSignal s) (return ()) -          sendSignal    = withSession . callSignal -          withSession mc = connectSession >>= \c -> callNoReply c mc >> disconnect c -          callSignal :: [String] -> MethodCall -          callSignal s = ( methodCall -                          ( objectPath_    "/org/Xmobar/Control" ) -                          ( interfaceName_ "org.Xmobar.Control"  ) -                          ( memberName_    "SendSignal"          ) -                      ) { methodCallDestination = Just $ busName_ "org.Xmobar.Control" -                          , methodCallBody        = map toVariant s -                          } - -      toggleDocksHook _ _ _ = return (All True) - -      myDocksEventHook :: Event -> X All -      myDocksEventHook e = do -          when (et == mapNotify || et == unmapNotify) $ -              whenX ((not `fmap` (isClient w)) <&&> runQuery checkDock w) refresh -          return (All True) -          where w  = ev_window e -              et = ev_event_type e -    #+end_src +  See [[window-managers.org::*Example of using][Interfacing with window managers]] for an example of how to use +  the DBus interface from xmonad. diff --git a/doc/window-managers.org b/doc/window-managers.org index 3a194c8..09f7e3e 100644 --- a/doc/window-managers.org +++ b/doc/window-managers.org @@ -222,3 +222,68 @@ choice.                xpm :: String -> String                xpm = icon . (++ ".xpm")          #+end_src +*** Example for using the DBus IPC interface with XMonad + +    Bind the key which should {,un}map xmobar to a dummy value. This is +    necessary for {,un}grabKey in xmonad. + +    #+begin_src haskell +      ((0, xK_Alt_L), pure ()) +    #+end_src + +    Also, install =avoidStruts= layout modifier from +    =XMonad.Hooks.ManageDocks= + +    Finally, install these two event hooks (=handleEventHook= in =XConfig=) +    =myDocksEventHook= is a replacement for =docksEventHook= which reacts +    on unmap events as well (which =docksEventHook= doesn't). + +    #+begin_src haskell +      import qualified XMonad.Util.ExtensibleState as XS + +      data DockToggleTime = DTT { lastTime :: Time } deriving (Eq, Show, Typeable) + +      instance ExtensionClass DockToggleTime where +          initialValue = DTT 0 + +      toggleDocksHook :: Int -> KeySym -> Event -> X All +      toggleDocksHook to ks ( KeyEvent { ev_event_display = d +                                      , ev_event_type    = et +                                      , ev_keycode       = ekc +                                      , ev_time          = etime +                                      } ) = +              io (keysymToKeycode d ks) >>= toggleDocks >> return (All True) +          where +          toggleDocks kc +              | ekc == kc && et == keyPress = do +                  safeSendSignal ["Reveal 0", "TogglePersistent"] +                  XS.put ( DTT etime ) +              | ekc == kc && et == keyRelease = do +                  gap <- XS.gets ( (-) etime . lastTime ) +                  safeSendSignal [ "TogglePersistent" +                              , "Hide " ++ show (if gap < 400 then to else 0) +                              ] +              | otherwise = return () + +          safeSendSignal s = catchX (io $ sendSignal s) (return ()) +          sendSignal    = withSession . callSignal +          withSession mc = connectSession >>= \c -> callNoReply c mc >> disconnect c +          callSignal :: [String] -> MethodCall +          callSignal s = ( methodCall +                          ( objectPath_    "/org/Xmobar/Control" ) +                          ( interfaceName_ "org.Xmobar.Control"  ) +                          ( memberName_    "SendSignal"          ) +                      ) { methodCallDestination = Just $ busName_ "org.Xmobar.Control" +                          , methodCallBody        = map toVariant s +                          } + +      toggleDocksHook _ _ _ = return (All True) + +      myDocksEventHook :: Event -> X All +      myDocksEventHook e = do +          when (et == mapNotify || et == unmapNotify) $ +              whenX ((not `fmap` (isClient w)) <&&> runQuery checkDock w) refresh +          return (All True) +          where w  = ev_window e +              et = ev_event_type e +    #+end_src | 
