diff --git a/CHANGES.md b/CHANGES.md index e7f44d76..1826c3ec 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -89,6 +89,11 @@ * `XMonad.Actions.MessageHandling` Refresh-performing functions updated to better reflect the new `sendMessage`. + * `XMonad.Actions.DynamicProjects` + Add a version of `withNthWorkspace` that takes a `[WorkspaceId] -> + [WorkspaceId]` transformation to apply over the list of workspace tags + resulting from the dynamic order. + ## 0.14 ### Breaking Changes diff --git a/XMonad/Actions/DynamicWorkspaceOrder.hs b/XMonad/Actions/DynamicWorkspaceOrder.hs index ccb8fef6..f1755cca 100644 --- a/XMonad/Actions/DynamicWorkspaceOrder.hs +++ b/XMonad/Actions/DynamicWorkspaceOrder.hs @@ -30,6 +30,7 @@ module XMonad.Actions.DynamicWorkspaceOrder , moveToGreedy , shiftTo + , withNthWorkspace' , withNthWorkspace ) where @@ -183,13 +184,19 @@ moveToGreedy dir t = doTo dir t getSortByOrder (windows . W.greedyView) shiftTo :: Direction1D -> WSType -> X () shiftTo dir t = doTo dir t getSortByOrder (windows . W.shift) +-- | Do something with the nth workspace in the dynamic order after +-- transforming it. The callback is given the workspace's tag as well +-- as the 'WindowSet' of the workspace itself. +withNthWorkspace' :: ([WorkspaceId] -> [WorkspaceId]) -> (String -> WindowSet -> WindowSet) -> Int -> X () +withNthWorkspace' tr job wnum = do + sort <- getSortByOrder + ws <- gets (tr . map W.tag . sort . W.workspaces . windowset) + case drop wnum ws of + (w:_) -> windows $ job w + [] -> return () + -- | Do something with the nth workspace in the dynamic order. The -- callback is given the workspace's tag as well as the 'WindowSet' -- of the workspace itself. withNthWorkspace :: (String -> WindowSet -> WindowSet) -> Int -> X () -withNthWorkspace job wnum = do - sort <- getSortByOrder - ws <- gets (map W.tag . sort . W.workspaces . windowset) - case drop wnum ws of - (w:_) -> windows $ job w - [] -> return () +withNthWorkspace = withNthWorkspace' id