summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--doc/plugins.org8
-rw-r--r--doc/quick-start.org66
-rw-r--r--doc/window-managers.org69
-rw-r--r--readme.org7
4 files changed, 71 insertions, 79 deletions
diff --git a/doc/plugins.org b/doc/plugins.org
index 6f388c1..558bdef 100644
--- a/doc/plugins.org
+++ b/doc/plugins.org
@@ -35,9 +35,8 @@
100
#+end_src
- See also [[./window-managers.org][Interfacing with window managers]] for a collection of
- plugins that let you interact and control xmobar from window
- managers.
+ See also [[#interfacing-with-window-managers][Interfacing with window managers]] below for a collection of plugins
+ that let you interact and control xmobar from window managers.
** Icon Patterns
@@ -1328,6 +1327,9 @@
- Default template: =Up: <days>d <hours>h <minutes>m=
* Interfacing with window managers
+ :PROPERTIES:
+ :CUSTOM_ID: interfacing-with-window-managers
+ :END:
** Property-based logging
*** =XMonadLog=
diff --git a/doc/quick-start.org b/doc/quick-start.org
index 2557295..5ae9d1a 100644
--- a/doc/quick-start.org
+++ b/doc/quick-start.org
@@ -469,5 +469,67 @@ available [[https://codeberg.org/xmobar/xmobar/src/branch/master/examples/xmobar
before the command takes effect, while =SetAlpha= takes a new alpha
value (also an integer, between 0 and 255) as argument.
- See [[./window-managers.org::*Example of using][Interfacing with window managers]] for an example of how to use
- the DBus interface from xmonad.
+** Example: 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
diff --git a/doc/window-managers.org b/doc/window-managers.org
deleted file mode 100644
index 92bc651..0000000
--- a/doc/window-managers.org
+++ /dev/null
@@ -1,69 +0,0 @@
-#+title: Interfacing with window managers
-
-Listed below are ways to interface xmobar with your window manager of
-choice.
-
-* 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
diff --git a/readme.org b/readme.org
index 862c203..bf48e10 100644
--- a/readme.org
+++ b/readme.org
@@ -180,15 +180,12 @@ channel, ~#xmobar~, at [[ircs://irc.libera.chat][Libera]].
- If you want to get a detailed overview of all available plugins and
monitors, visit the [[./doc/plugins.org][plugins index]].
- - [[./doc/window-managers.org][Interfacing with window managers]] describes plugins and extensions
- for interacting with xmobar from your window manager.
+ - For elaborated examples of how to use xmobar as a Haskell library see the
+ [[file:doc/using-haskell.org][using Haskell docs]].
- If you want to know how to contribute to the xmobar project, check out
[[contributing.org][contributing]].
- - For elaborated examples of how to use xmobar as a Haskell library see the
- [[file:doc/using-haskell.org][using Haskell docs]].
-
* Authors and credits
Andrea Rossato originally designed and implemented xmobar up to