new module DynamicWorkspaces to add and remove workspaces.

This commit is contained in:
David Roundy
2007-08-14 01:15:01 +00:00
parent 1fbdc5bb75
commit 93ae00b665
2 changed files with 53 additions and 0 deletions

52
DynamicWorkspaces.hs Normal file
View File

@@ -0,0 +1,52 @@
-----------------------------------------------------------------------------
-- |
-- Module : XMonadContrib.DynamicWorkspaces
-- Copyright : (c) David Roundy <droundy@darcs.net>
-- License : BSD3-style (see LICENSE)
--
-- Maintainer : David Roundy <droundy@darcs.net>
-- Stability : unstable
-- Portability : unportable
--
-- Provides bindings to add and delete workspaces. Note that you may only
-- delete a workspace that is already empty.
--
-----------------------------------------------------------------------------
module XMonadContrib.DynamicWorkspaces (
-- * Usage
-- $usage
addWorkspace, removeWorkspace
) where
import XMonad ( X )
import Operations ( windows )
import StackSet ( tagMember, StackSet(..), Screen(..), Workspace(..) )
-- $usage
-- You can use this module with the following in your Config.hs file:
--
-- > import XMonadContrib.DynamicWorkspaces
--
-- > , ((modMask .|. shiftMask, xK_Up), addWorkspace)
-- > , ((modMask .|. shiftMask, xK_Down), removeWorkspace)
addWorkspace :: X ()
addWorkspace = windows addWorkspace'
removeWorkspace :: X ()
removeWorkspace = windows removeWorkspace'
addWorkspace' :: (Enum i, Num i) => StackSet i a sid sd -> StackSet i a sid sd
addWorkspace' s@(StackSet { current = scr@(Screen { workspace = w })
, hidden = ws })
= s { current = scr { workspace = Workspace newtag Nothing }
, hidden = w:ws }
where (newtag:_) = filter (not . (`tagMember` s)) [0..]
removeWorkspace' :: StackSet i a sid sd -> StackSet i a sid sd
removeWorkspace' s@(StackSet { current = scr@(Screen { workspace = Workspace { stack = Nothing } })
, hidden = (w:ws) })
= s { current = scr { workspace = w }
, hidden = ws }
removeWorkspace' s = s

View File

@@ -31,6 +31,7 @@ import XMonadContrib.DeManage ()
import XMonadContrib.Dmenu () import XMonadContrib.Dmenu ()
import XMonadContrib.DwmPromote () import XMonadContrib.DwmPromote ()
import XMonadContrib.DynamicLog () import XMonadContrib.DynamicLog ()
import XMonadContrib.DynamicWorkspaces ()
import XMonadContrib.Dzen () import XMonadContrib.Dzen ()
import XMonadContrib.FindEmptyWorkspace () import XMonadContrib.FindEmptyWorkspace ()
import XMonadContrib.FlexibleResize () import XMonadContrib.FlexibleResize ()