aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--XMonad/Util/EZConfig.hs55
-rw-r--r--XMonadContrib.cabal1
2 files changed, 56 insertions, 0 deletions
diff --git a/XMonad/Util/EZConfig.hs b/XMonad/Util/EZConfig.hs
new file mode 100644
index 0000000..d2c0c5e
--- /dev/null
+++ b/XMonad/Util/EZConfig.hs
@@ -0,0 +1,55 @@
+--------------------------------------------------------------------
+-- |
+-- Module : XMonad.Util.EZConfig
+-- Copyright : Devin Mullins <me@twifkak.com>
+-- License : BSD3-style (see LICENSE)
+--
+-- Maintainer : Devin Mullins <me@twifkak.com>
+--
+-- Useful helper functions for amending the defaultConfig.
+--
+--------------------------------------------------------------------
+
+module XMonad.Util.EZConfig (
+ additionalKeys, removeKeys,
+ additionalMouseBindings, removeMouseBindings
+ ) where
+-- TODO: write tests
+
+import XMonad
+
+import qualified Data.Map as M
+import Graphics.X11.Xlib
+
+-- Add or override keybindings from the existing set. Example use:
+-- > main = xmonad $ defaultConfig { terminal = "urxvt" }
+-- > `additionalKeys`
+-- > [ ((mod1Mask, xK_m ), spawn "echo 'Hi, mom!' | dzen2 -p 4")
+-- > , ((mod1Mask, xK_BackSpace), withFocused hide) -- N.B. this is an absurd thing to do
+-- > ]
+-- This overrides the previous definition of mod-m.
+--
+-- Note that, unlike in xmonad 0.4 and previous, you can't use modMask to refer
+-- to the modMask you configured earlier. You must specify mod1Mask (or
+-- whichever), or add your own @myModMask = mod1Mask@ line.
+additionalKeys :: XConfig -> [((ButtonMask, KeySym), X ())] -> XConfig
+additionalKeys conf keysList =
+ conf { keys = \cnf -> M.union (M.fromList keysList) (keys conf cnf) }
+
+-- Remove standard keybidings you're not using. Example use:
+-- > main = xmonad $ defaultConfig { terminal = "urxvt" }
+-- > `removeKeys` [(mod1Mask .|. shiftMask, n) | n <- [xK_1 .. xK_9]]
+removeKeys :: XConfig -> [(ButtonMask, KeySym)] -> XConfig
+removeKeys conf keyList =
+ conf { keys = \cnf -> keys conf cnf `M.difference` M.fromList (zip keyList $ return ()) }
+
+-- Like additionalKeys, but for mouseBindings.
+additionalMouseBindings :: XConfig -> [((ButtonMask, Button), Window -> X ())] -> XConfig
+additionalMouseBindings conf mouseBindingsList =
+ conf { mouseBindings = \cnf -> M.union (M.fromList mouseBindingsList) (mouseBindings conf cnf) }
+
+-- Like removeKeys, but for mouseBindings.
+removeMouseBindings :: XConfig -> [(ButtonMask, Button)] -> XConfig
+removeMouseBindings conf mouseBindingList =
+ conf { mouseBindings = \cnf -> mouseBindings conf cnf `M.difference`
+ M.fromList (zip mouseBindingList $ return ()) }
diff --git a/XMonadContrib.cabal b/XMonadContrib.cabal
index 0a05e99..65b69c8 100644
--- a/XMonadContrib.cabal
+++ b/XMonadContrib.cabal
@@ -99,6 +99,7 @@ library
XMonad.Util.Anneal
XMonad.Util.Dmenu
XMonad.Util.Dzen
+ XMonad.Util.EZConfig
XMonad.Util.Invisible
XMonad.Util.NamedWindows
XMonad.Util.Run