mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-08-18 13:43:48 -07:00
X.A.CycleWS Refactor and add toggleWS' that excludes listed tags
This commit is contained in:
@@ -46,6 +46,7 @@ module XMonad.Actions.CycleWS (
|
|||||||
-- * Toggling the previous workspace
|
-- * Toggling the previous workspace
|
||||||
-- $toggling
|
-- $toggling
|
||||||
, toggleWS
|
, toggleWS
|
||||||
|
, toggleWS'
|
||||||
, toggleOrView
|
, toggleOrView
|
||||||
|
|
||||||
-- * Moving between screens (xinerama)
|
-- * Moving between screens (xinerama)
|
||||||
@@ -150,9 +151,16 @@ shiftToPrev = shiftBy (-1)
|
|||||||
|
|
||||||
-- | Toggle to the workspace displayed previously.
|
-- | Toggle to the workspace displayed previously.
|
||||||
toggleWS :: X ()
|
toggleWS :: X ()
|
||||||
toggleWS = do
|
toggleWS = toggleWS' []
|
||||||
hs <- gets (hidden . windowset)
|
|
||||||
unless (null hs) (windows . view . tag $ head hs)
|
-- | Toggle to the previous workspace while excluding some workspaces.
|
||||||
|
--
|
||||||
|
-- > -- Ignore the scratchpad workspace while toggling:
|
||||||
|
-- > ("M-b", toggleWS' ["NSP"])
|
||||||
|
toggleWS' :: [WorkspaceId] -> X ()
|
||||||
|
toggleWS' skips = do
|
||||||
|
hs' <- cleanHiddens skips
|
||||||
|
unless (null hs') (windows . view . tag $ head hs')
|
||||||
|
|
||||||
-- | 'XMonad.StackSet.greedyView' a workspace, or if already there, view
|
-- | 'XMonad.StackSet.greedyView' a workspace, or if already there, view
|
||||||
-- the previously displayed workspace ala weechat. Change @greedyView@ to
|
-- the previously displayed workspace ala weechat. Change @greedyView@ to
|
||||||
@@ -162,9 +170,8 @@ toggleWS = do
|
|||||||
toggleOrView :: WorkspaceId -> X ()
|
toggleOrView :: WorkspaceId -> X ()
|
||||||
toggleOrView = toggleOrDoSkip [] greedyView
|
toggleOrView = toggleOrDoSkip [] greedyView
|
||||||
|
|
||||||
-- | Allows ignoring listed workspace tags (such as scratchpad's \"NSP\") while
|
-- | Allows ignoring listed workspace tags (such as scratchpad's \"NSP\"), and
|
||||||
-- finding the previously displayed workspace, or choice of different actions,
|
-- running other actions such as view, shift, etc. For example:
|
||||||
-- like view, shift, etc. For example:
|
|
||||||
--
|
--
|
||||||
-- > import qualified XMonad.StackSet as W
|
-- > import qualified XMonad.StackSet as W
|
||||||
-- > import XMonad.Actions.CycleWS
|
-- > import XMonad.Actions.CycleWS
|
||||||
@@ -177,9 +184,9 @@ toggleOrView = toggleOrDoSkip [] greedyView
|
|||||||
toggleOrDoSkip :: [WorkspaceId] -> (WorkspaceId -> WindowSet -> WindowSet)
|
toggleOrDoSkip :: [WorkspaceId] -> (WorkspaceId -> WindowSet -> WindowSet)
|
||||||
-> WorkspaceId -> X ()
|
-> WorkspaceId -> X ()
|
||||||
toggleOrDoSkip skips f toWS = do
|
toggleOrDoSkip skips f toWS = do
|
||||||
ws <- gets windowset
|
hs' <- cleanHiddens skips
|
||||||
let hs' = hidden ws `skipTags` skips
|
cur <- gets (currentTag . windowset)
|
||||||
if toWS == (tag . workspace $ current ws)
|
if toWS == cur
|
||||||
then unless (null hs') (windows . f . tag $ head hs')
|
then unless (null hs') (windows . f . tag $ head hs')
|
||||||
else windows (f toWS)
|
else windows (f toWS)
|
||||||
|
|
||||||
@@ -188,6 +195,9 @@ toggleOrDoSkip skips f toWS = do
|
|||||||
skipTags :: (Eq i) => [Workspace i l a] -> [i] -> [Workspace i l a]
|
skipTags :: (Eq i) => [Workspace i l a] -> [i] -> [Workspace i l a]
|
||||||
skipTags wss ids = filter ((`notElem` ids) . tag) wss
|
skipTags wss ids = filter ((`notElem` ids) . tag) wss
|
||||||
|
|
||||||
|
cleanHiddens :: [WorkspaceId] -> X [WindowSpace]
|
||||||
|
cleanHiddens skips = gets $ (flip skipTags) skips . hidden . windowset
|
||||||
|
|
||||||
switchWorkspace :: Int -> X ()
|
switchWorkspace :: Int -> X ()
|
||||||
switchWorkspace d = wsBy d >>= windows . greedyView
|
switchWorkspace d = wsBy d >>= windows . greedyView
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user