mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-07-30 19:51:51 -07:00
new module DynamicWorkspaces to add and remove workspaces.
This commit is contained in:
52
DynamicWorkspaces.hs
Normal file
52
DynamicWorkspaces.hs
Normal 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
|
@@ -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 ()
|
||||||
|
Reference in New Issue
Block a user