aboutsummaryrefslogtreecommitdiffstats
path: root/XMonad
diff options
context:
space:
mode:
Diffstat (limited to 'XMonad')
-rw-r--r--XMonad/Actions/BluetileCommands.hs83
1 files changed, 83 insertions, 0 deletions
diff --git a/XMonad/Actions/BluetileCommands.hs b/XMonad/Actions/BluetileCommands.hs
new file mode 100644
index 0000000..a8e0f2b
--- /dev/null
+++ b/XMonad/Actions/BluetileCommands.hs
@@ -0,0 +1,83 @@
+----------------------------------------------------------------------------
+-- |
+-- Module : XMonad.Actions.BluetileCommands
+-- Copyright : (c) Jan Vornberger 2009
+-- License : BSD3-style (see LICENSE)
+--
+-- Maintainer : jan.vornberger@informatik.uni-oldenburg.de
+-- Stability : unstable
+-- Portability : not portable
+--
+-- This is a list of selected commands that can be made available using
+-- "XMonad.Hooks.ServerMode" to allow external programs to control
+-- the window manager. Bluetile (<http://projects.haskell.org/bluetile/>)
+-- uses this to enable its dock application to do things like changing
+-- workspaces and layouts.
+--
+-----------------------------------------------------------------------------
+
+module XMonad.Actions.BluetileCommands (
+ -- * Usage
+ -- $usage
+ bluetileCommands
+ ) where
+
+import XMonad
+import qualified XMonad.StackSet as W
+import XMonad.Layout.LayoutCombinators
+import System.Exit
+
+-- $usage
+--
+-- You can use this module with the following in your @~\/.xmonad\/xmonad.hs@:
+--
+-- > import XMonad.Hooks.ServerMode
+-- > import XMonad.Actions.BluetileCommands
+--
+-- Then edit your @handleEventHook@:
+--
+-- > main = xmonad defaultConfig { handleEventHook = serverModeEventHook' bluetileCommands }
+--
+-- See the documentation of "XMonad.Hooks.ServerMode" for details on
+-- how to actually invoke the commands from external programs.
+
+workspaceCommands :: Int -> X [(String, X ())]
+workspaceCommands sid = asks (workspaces . config) >>= \spaces -> return
+ [(("greedyView" ++ show i),
+ activateScreen sid >> windows (W.greedyView i))
+ | i <- spaces ]
+
+layoutCommands :: Int -> [(String, X ())]
+layoutCommands sid = [ ("layout floating" , activateScreen sid >>
+ sendMessage (JumpToLayout "Floating"))
+ , ("layout tiled1" , activateScreen sid >>
+ sendMessage (JumpToLayout "Tiled1"))
+ , ("layout tiled2" , activateScreen sid >>
+ sendMessage (JumpToLayout "Tiled2"))
+ , ("layout fullscreen" , activateScreen sid >>
+ sendMessage (JumpToLayout "Fullscreen"))
+ ]
+
+masterAreaCommands :: Int -> [(String, X ())]
+masterAreaCommands sid = [ ("increase master n", activateScreen sid >>
+ sendMessage (IncMasterN 1))
+ , ("decrease master n", activateScreen sid >>
+ sendMessage (IncMasterN (-1)))
+ ]
+
+quitCommands :: [(String, X ())]
+quitCommands = [ ("quit bluetile", io (exitWith ExitSuccess))
+ , ("quit bluetile and start metacity", restart "metacity" False)
+ ]
+
+bluetileCommands :: X [(String, X ())]
+bluetileCommands = do
+ let restartCommand = [ ("restart bluetile", restart "bluetile" True) ]
+ wscmds0 <- workspaceCommands 0
+ wscmds1 <- workspaceCommands 1
+ return $ restartCommand
+ ++ wscmds0 ++ layoutCommands 0 ++ masterAreaCommands 0 ++ quitCommands
+ ++ wscmds1 ++ layoutCommands 1 ++ masterAreaCommands 1 ++ quitCommands
+
+activateScreen :: Int -> X ()
+activateScreen sid = screenWorkspace (S sid) >>= flip whenJust (windows . W.view)