From 3352241c8cfe40428742ca6829ea427498f949e5 Mon Sep 17 00:00:00 2001 From: Devin Mullins Date: Sun, 11 Nov 2007 08:52:22 +0100 Subject: add helper module for writing configs Looking for suggestions on this module. Does it belong here? Is there a better name? Should the additional* functions pass the modMask to their second argument? etc. darcs-hash:20071111075222-78224-05444e7180cbb34f2d4762774bb160bf90d9db22.gz --- XMonad/Util/EZConfig.hs | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 XMonad/Util/EZConfig.hs (limited to 'XMonad/Util/EZConfig.hs') 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 +-- License : BSD3-style (see LICENSE) +-- +-- Maintainer : Devin Mullins +-- +-- 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 ()) } -- cgit v1.2.3