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 (
|
module XMonadContrib.DynamicWorkspaces (
|
||||||
-- * Usage
|
-- * Usage
|
||||||
-- $usage
|
-- $usage
|
||||||
addWorkspace, removeWorkspace
|
addWorkspace, removeWorkspace,
|
||||||
|
selectWorkspace
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Control.Monad.State ( gets )
|
import Control.Monad.State ( gets )
|
||||||
@ -25,18 +26,27 @@ import XMonad ( X, XState(..), Layout, WorkspaceId )
|
|||||||
import Operations
|
import Operations
|
||||||
import StackSet hiding (filter, modify, delete)
|
import StackSet hiding (filter, modify, delete)
|
||||||
import Graphics.X11.Xlib ( Window )
|
import Graphics.X11.Xlib ( Window )
|
||||||
|
import XMonadContrib.WorkspacePrompt
|
||||||
|
import XMonadContrib.XPrompt ( XPConfig )
|
||||||
|
|
||||||
-- $usage
|
-- $usage
|
||||||
-- You can use this module with the following in your Config.hs file:
|
-- You can use this module with the following in your Config.hs file:
|
||||||
--
|
--
|
||||||
-- > import XMonadContrib.DynamicWorkspaces
|
-- > import XMonadContrib.DynamicWorkspaces
|
||||||
--
|
--
|
||||||
-- > , ((modMask .|. shiftMask, xK_Up), addWorkspace layouts)
|
-- > , ((modMask .|. shiftMask, xK_n), selectWorkspace defaultXPConfig layoutHook)
|
||||||
-- > , ((modMask .|. shiftMask, xK_Down), removeWorkspace)
|
-- > , ((modMask .|. shiftMask, xK_BackSpace), removeWorkspace)
|
||||||
|
|
||||||
allPossibleTags :: [WorkspaceId]
|
allPossibleTags :: [WorkspaceId]
|
||||||
allPossibleTags = map (:"") ['0'..]
|
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 :: Layout Window -> X ()
|
||||||
addWorkspace l = do s <- gets windowset
|
addWorkspace l = do s <- gets windowset
|
||||||
let newtag:_ = filter (not . (`tagMember` s)) allPossibleTags
|
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