|Maintainer||Joachim Breitner <email@example.com>|
Provides bindings to cycle forward or backward through the list of workspaces, to move windows between workspaces, and to cycle between screens. More general combinators provide ways to cycle through workspaces in various orders, to only cycle through some subset of workspaces, and to cycle by more than one workspace at a time.
Note that this module now subsumes the functionality of the former
XMonad.Actions.RotView. Former users of
rotView can simply replace
rotView True with
moveTo Next NonEmptyWS, and so on.
If you want to exactly replicate the action of
through workspace in order lexicographically by tag, instead of in
the order specified in the config), it can be implemented as:
rotView b = do t <- findWorkspace getSortByTag (bToDir b) NonEmptyWS 1 windows . greedyView $ t where bToDir True = Next bToDir False = Prev
- nextWS :: X ()
- prevWS :: X ()
- shiftToNext :: X ()
- shiftToPrev :: X ()
- toggleWS :: X ()
- toggleOrView :: WorkspaceId -> X ()
- nextScreen :: X ()
- prevScreen :: X ()
- shiftNextScreen :: X ()
- shiftPrevScreen :: X ()
- swapNextScreen :: X ()
- swapPrevScreen :: X ()
- data Direction1D
- data WSType
- shiftTo :: Direction1D -> WSType -> X ()
- moveTo :: Direction1D -> WSType -> X ()
- doTo :: Direction1D -> WSType -> X WorkspaceSort -> (WorkspaceId -> X ()) -> X ()
- findWorkspace :: X WorkspaceSort -> Direction1D -> WSType -> Int -> X WorkspaceId
- toggleOrDoSkip :: [WorkspaceId] -> (WorkspaceId -> WindowSet -> WindowSet) -> WorkspaceId -> X ()
- skipTags :: Eq i => [Workspace i l a] -> [i] -> [Workspace i l a]
You can use this module with the following in your
import XMonad.Actions.CycleWS -- a basic CycleWS setup , ((modm, xK_Down), nextWS) , ((modm, xK_Up), prevWS) , ((modm .|. shiftMask, xK_Down), shiftToNext) , ((modm .|. shiftMask, xK_Up), shiftToPrev) , ((modm, xK_Right), nextScreen) , ((modm, xK_Left), prevScreen) , ((modm .|. shiftMask, xK_Right), shiftNextScreen) , ((modm .|. shiftMask, xK_Left), shiftPrevScreen) , ((modm, xK_z), toggleWS)
If you want to follow the moved window, you can use both actions:
, ((modm .|. shiftMask, xK_Down), shiftToNext >> nextWS) , ((modm .|. shiftMask, xK_Up), shiftToPrev >> prevWS)
, ((modm , xK_f), moveTo Next EmptyWS) -- find a free workspace , ((modm .|. controlMask, xK_Right), -- a crazy keybinding! do t <- findWorkspace getSortByXineramaRule Next NonEmptyWS 2 windows . view $ t )
For detailed instructions on editing your key bindings, see XMonad.Doc.Extending.
Moving between workspaces
The following commands for moving the view and windows between workspaces are somewhat inflexible, but are very simple and probably Do The Right Thing for most users.
All of the commands in this section cycle through workspaces in the order in which they are given in your config.
Toggling the previous workspace
greedyView a workspace, or if already there, view
the previously displayed workspace ala weechat. Change
toggleOrView in your workspace bindings as in the
faq at http://haskell.org/haskellwiki/Xmonad/Frequently_asked_questions.
For more flexibility see
Moving between screens (xinerama)
Moving between workspaces, take two!
A few more general commands are also provided, which allow cycling through subsets of workspaces.
moveTo Next EmptyWS
will move to the first available workspace with no windows, and
shiftTo Prev (WSIs $ return (('p' `elem`) . tag))
will move the focused window backwards to the first workspace containing
p in its name. =)
What type of workspaces should be included in the cycle?
cycle through empty workspaces
cycle through non-empty workspaces
cycle through non-visible workspaces
cycle through non-empty non-visible workspaces
cycle through all workspaces
cycle through workspaces in the same group, the group name is all characters up to the first separator character or the end of the tag
|WSIs (X (WindowSpace -> Bool))|
cycle through workspaces satisfying an arbitrary predicate
Move the currently focused window to the next workspace in the given direction that satisfies the given condition.
View the next workspace in the given direction that satisfies the given condition.
Using the given sort, find the next workspace in the given direction of the given type, and perform the given action on it.
Given a function
s to sort workspaces, a direction
p on workspaces, and an integer
n, find the tag of
the workspace which is
n away from the current workspace in
dir (wrapping around if necessary), among those
workspaces, sorted by
s, which satisfy
For some useful workspace sorting functions, see XMonad.Util.WorkspaceCompare.
For ideas of what to do with a workspace tag once obtained, note
shiftTo are implemented by applying
(windows . greedyView)) and
(>>= (windows . shift)), respectively,
to the output of
Allows ignoring listed workspace tags (such as scratchpad's "NSP") while finding the previously displayed workspace, or choice of different actions, like view, shift, etc. For example:
import qualified XMonad.StackSet as W import XMonad.Actions.CycleWS -- toggleOrView for people who prefer view to greedyView toggleOrView' = toggleOrDoSkip  W.view -- toggleOrView ignoring scratchpad and named scratchpad workspace toggleOrViewNoSP = toggleOrDoSkip ["NSP"] W.greedyView