mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 11:30:22 -07:00
X.A.DynamicWorkspaceGroups
: TopicSpace support (#538)
* `X.A.DynamicWorkspaceGroups`: TopicSpace support This adds `viewTopicGroup` and a corresponding prompt. This is similar to `viewWSGroup`, but it calls `switchTopic` instead of `W.greedyView`, inorder to run the topic action on the workspace.
This commit is contained in:
parent
12b17c4935
commit
3f8c570347
@ -231,6 +231,11 @@
|
||||
|
||||
* Add support for GHC 9.0.1.
|
||||
|
||||
* `XMonad.Actions.DynamicWorkspaceGroups`
|
||||
|
||||
- Add support for `XMonad.Actions.TopicSpace` through `viewTopicGroup` and
|
||||
`promptTopicGroupView`.
|
||||
|
||||
* `XMonad.Actions.TreeSelect`
|
||||
|
||||
- Fix swapped green/blue in foreground when using Xft.
|
||||
|
@ -34,6 +34,10 @@ module XMonad.Actions.DynamicWorkspaceGroups
|
||||
, promptWSGroupForget
|
||||
|
||||
, WSGPrompt
|
||||
-- * TopicSpace Integration
|
||||
-- $topics
|
||||
, viewTopicGroup
|
||||
, promptTopicGroupView
|
||||
) where
|
||||
|
||||
import Control.Arrow ((&&&))
|
||||
@ -45,6 +49,7 @@ import qualified XMonad.StackSet as W
|
||||
|
||||
import XMonad.Prompt
|
||||
import qualified XMonad.Util.ExtensibleState as XS
|
||||
import XMonad.Actions.TopicSpace
|
||||
|
||||
-- $usage
|
||||
-- You can use this module by importing it into your ~\/.xmonad\/xmonad.hs file:
|
||||
@ -103,20 +108,24 @@ forgetWSGroup = XS.modify . withWSG . M.delete
|
||||
|
||||
-- | View the workspace group with the given name.
|
||||
viewWSGroup :: WSGroupId -> X ()
|
||||
viewWSGroup name = do
|
||||
viewWSGroup = viewGroup (windows . W.greedyView)
|
||||
|
||||
-- | Internal function for viewing a group.
|
||||
viewGroup :: (WorkspaceId -> X ()) -> WSGroupId -> X ()
|
||||
viewGroup fview name = do
|
||||
WSG m <- XS.get
|
||||
case M.lookup name m of
|
||||
Just grp -> mapM_ (uncurry viewWS) grp
|
||||
Just grp -> mapM_ (uncurry (viewWS fview)) grp
|
||||
Nothing -> return ()
|
||||
|
||||
-- | View the given workspace on the given screen.
|
||||
viewWS :: ScreenId -> WorkspaceId -> X ()
|
||||
viewWS sid wid = do
|
||||
-- | View the given workspace on the given screen, using the provided function.
|
||||
viewWS :: (WorkspaceId -> X ()) -> ScreenId -> WorkspaceId -> X ()
|
||||
viewWS fview sid wid = do
|
||||
mw <- findScreenWS sid
|
||||
case mw of
|
||||
Just w -> do
|
||||
windows $ W.view w
|
||||
windows $ W.greedyView wid
|
||||
fview wid
|
||||
Nothing -> return ()
|
||||
|
||||
-- | Find the workspace which is currently on the given screen.
|
||||
@ -131,9 +140,13 @@ instance XPrompt WSGPrompt where
|
||||
|
||||
-- | Prompt for a workspace group to view.
|
||||
promptWSGroupView :: XPConfig -> String -> X ()
|
||||
promptWSGroupView xp s = do
|
||||
promptWSGroupView = promptGroupView viewWSGroup
|
||||
|
||||
-- | Internal function for making a prompt to view a workspace group
|
||||
promptGroupView :: (WSGroupId -> X ()) -> XPConfig -> String -> X ()
|
||||
promptGroupView fview xp s = do
|
||||
gs <- fmap (M.keys . unWSG) XS.get
|
||||
mkXPrompt (WSGPrompt s) xp (mkComplFunFromList' xp gs) viewWSGroup
|
||||
mkXPrompt (WSGPrompt s) xp (mkComplFunFromList' xp gs) fview
|
||||
|
||||
-- | Prompt for a name for the current workspace group.
|
||||
promptWSGroupAdd :: XPConfig -> String -> X ()
|
||||
@ -145,3 +158,24 @@ promptWSGroupForget :: XPConfig -> String -> X ()
|
||||
promptWSGroupForget xp s = do
|
||||
gs <- fmap (M.keys . unWSG) XS.get
|
||||
mkXPrompt (WSGPrompt s) xp (mkComplFunFromList' xp gs) forgetWSGroup
|
||||
|
||||
-- $topics
|
||||
-- You can use this module with "XMonad.Actions.TopicSpace" — just replace
|
||||
-- 'promptWSGroupView' with 'promptTopicGroupView':
|
||||
--
|
||||
-- > , ("M-y n", promptWSGroupAdd myXPConfig "Name this group: ")
|
||||
-- > , ("M-y g", promptTopicGroupView myTopicConfig myXPConfig "Go to group: ")
|
||||
-- > , ("M-y d", promptWSGroupForget myXPConfig "Forget group: ")
|
||||
--
|
||||
-- It's also a good idea to replace 'spawn' with
|
||||
-- 'XMonad.Actions.SpawnOn.spawnOn' or 'XMonad.Actions.SpawnOn.spawnHere' in
|
||||
-- your topic actions, so everything is spawned where it should be.
|
||||
|
||||
-- | Prompt for a workspace group to view, treating the workspaces as topics.
|
||||
promptTopicGroupView :: TopicConfig -> XPConfig -> String -> X ()
|
||||
promptTopicGroupView = promptGroupView . viewTopicGroup
|
||||
|
||||
-- | View the workspace group with the given name, treating the workspaces as
|
||||
-- topics.
|
||||
viewTopicGroup :: TopicConfig -> WSGroupId -> X ()
|
||||
viewTopicGroup = viewGroup . switchTopic
|
||||
|
Loading…
x
Reference in New Issue
Block a user