mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 11:30:22 -07:00
add modules to deal with Workspaces (select, etc) by name using XPrompt.
This commit is contained in:
parent
1ec41467de
commit
e43eabfd93
@ -16,7 +16,8 @@
|
||||
module XMonadContrib.DynamicWorkspaces (
|
||||
-- * Usage
|
||||
-- $usage
|
||||
addWorkspace, removeWorkspace
|
||||
addWorkspace, removeWorkspace,
|
||||
selectWorkspace
|
||||
) where
|
||||
|
||||
import Control.Monad.State ( gets )
|
||||
@ -25,18 +26,27 @@ import XMonad ( X, XState(..), Layout, WorkspaceId )
|
||||
import Operations
|
||||
import StackSet hiding (filter, modify, delete)
|
||||
import Graphics.X11.Xlib ( Window )
|
||||
import XMonadContrib.WorkspacePrompt
|
||||
import XMonadContrib.XPrompt ( XPConfig )
|
||||
|
||||
-- $usage
|
||||
-- You can use this module with the following in your Config.hs file:
|
||||
--
|
||||
-- > import XMonadContrib.DynamicWorkspaces
|
||||
--
|
||||
-- > , ((modMask .|. shiftMask, xK_Up), addWorkspace layouts)
|
||||
-- > , ((modMask .|. shiftMask, xK_Down), removeWorkspace)
|
||||
-- > , ((modMask .|. shiftMask, xK_n), selectWorkspace defaultXPConfig layoutHook)
|
||||
-- > , ((modMask .|. shiftMask, xK_BackSpace), removeWorkspace)
|
||||
|
||||
allPossibleTags :: [WorkspaceId]
|
||||
allPossibleTags = map (:"") ['0'..]
|
||||
|
||||
selectWorkspace :: XPConfig -> Layout Window -> X ()
|
||||
selectWorkspace conf l = workspacePrompt conf $ \w ->
|
||||
do s <- gets windowset
|
||||
if tagMember w s
|
||||
then windows $ greedyView w
|
||||
else windows $ addWorkspace' w l
|
||||
|
||||
addWorkspace :: Layout Window -> X ()
|
||||
addWorkspace l = do s <- gets windowset
|
||||
let newtag:_ = filter (not . (`tagMember` s)) allPossibleTags
|
||||
|
45
WorkspacePrompt.hs
Normal file
45
WorkspacePrompt.hs
Normal file
@ -0,0 +1,45 @@
|
||||
-----------------------------------------------------------------------------
|
||||
-- |
|
||||
-- Module : XMonadContrib.WorkspacePrompt
|
||||
-- Copyright : (C) 2007 Andrea Rossato, David Roundy
|
||||
-- License : BSD3
|
||||
--
|
||||
-- Maintainer : droundy@darcs.net
|
||||
-- Stability : unstable
|
||||
-- Portability : unportable
|
||||
--
|
||||
-- A directory prompt for XMonad
|
||||
--
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
module XMonadContrib.WorkspacePrompt (
|
||||
-- * Usage
|
||||
-- $usage
|
||||
workspacePrompt
|
||||
) where
|
||||
|
||||
import Control.Monad.State ( gets )
|
||||
import Data.List ( sort )
|
||||
import XMonad
|
||||
import XMonadContrib.XPrompt
|
||||
import StackSet ( workspaces, tag )
|
||||
|
||||
-- $usage
|
||||
-- You can use this module with the following in your Config.hs file:
|
||||
--
|
||||
-- > import XMonadContrib.WorkspacePrompt
|
||||
--
|
||||
-- > , ((modMask .|. shiftMask, xK_m ), workspacePrompt myXPConfig (windows . W.shift))
|
||||
|
||||
data Wor = Wor String
|
||||
|
||||
instance XPrompt Wor where
|
||||
showXPrompt (Wor x) = x
|
||||
|
||||
workspacePrompt :: XPConfig -> (String -> X ()) -> X ()
|
||||
workspacePrompt c job = do ws <- gets (workspaces . windowset)
|
||||
let ts = sort $ map tag ws
|
||||
mkXPrompt (Wor "") c (mkCompl ts) job
|
||||
|
||||
mkCompl :: [String] -> String -> IO [String]
|
||||
mkCompl l s = return $ filter (\x -> take (length s) x == s) l
|
Loading…
x
Reference in New Issue
Block a user