aboutsummaryrefslogtreecommitdiffstats
path: root/XMonad/Actions/PerWorkspaceKeys.hs
diff options
context:
space:
mode:
Diffstat (limited to 'XMonad/Actions/PerWorkspaceKeys.hs')
-rw-r--r--XMonad/Actions/PerWorkspaceKeys.hs50
1 files changed, 50 insertions, 0 deletions
diff --git a/XMonad/Actions/PerWorkspaceKeys.hs b/XMonad/Actions/PerWorkspaceKeys.hs
new file mode 100644
index 0000000..9dd6a5d
--- /dev/null
+++ b/XMonad/Actions/PerWorkspaceKeys.hs
@@ -0,0 +1,50 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module : XMonad.Actions.PerWorkspaceKeys
+-- Copyright : (c) Roman Cheplyaka, 2008
+-- License : BSD3-style (see LICENSE)
+--
+-- Maintainer : Roman Cheplyaka <roma@ro-che.info>
+-- Stability : unstable
+-- Portability : unportable
+--
+-- Define key-bindings on per-workspace basis.
+--
+-----------------------------------------------------------------------------
+
+module XMonad.Actions.PerWorkspaceKeys (
+ -- * Usage
+ -- $usage
+ chooseAction,
+ bindOn
+ ) where
+
+import XMonad
+import XMonad.StackSet as S
+import Data.List (find)
+
+-- $usage
+--
+-- You can use this module with the following in your @~\/.xmonad\/xmonad.hs@:
+--
+-- > import XMonad.Actions.PerWorkspaceKeys
+--
+-- > ,((0, xK_F2), bindOn [("1", spawn "rxvt"), ("2", spawn "xeyes"), ("", spawn "xmessage hello")])
+--
+-- For detailed instructions on editing your key bindings, see
+-- "XMonad.Doc.Extending#Editing_key_bindings".
+
+-- | Uses supplied function to decide which action to run depending on current workspace name.
+chooseAction :: (String->X()) -> X()
+chooseAction f = withWindowSet (f . S.tag . S.workspace . S.current)
+
+-- | If current workspace is listed, run appropriate action (only the first match counts!)
+-- If it isn't listed, then run default action (marked with empty string, \"\"), or do nothing if default isn't supplied.
+bindOn :: [(String, X())] -> X()
+bindOn bindings = chooseAction chooser where
+ chooser ws = case find ((ws==).fst) bindings of
+ Just (_, action) -> action
+ Nothing -> case find ((""==).fst) bindings of
+ Just (_, action) -> action
+ Nothing -> return ()
+