The way that workspace cycling is implemented right now—by generating new windowsets where the things we want happen to be true and then replacing the old windowsets—is not safe, as workspaces and layouts may carry state with them. That state will get lost in translation when windowsets are simply replaced. As an example, a conflict occurs when using `X.L.ShowWName.showWName` in one's layoutHook. When cycling through workspaces via, e.g., `cycleRecentWS` the flashed workspace tag will not disappear, as the necessary state to control this isn't present in the new windowset. Instead, what we want to do is to keep the "current" windowset alive and actually switch to the requested workspaces. This mostly works without much trouble, the only hard part is maintaining the invariant that previewed workspaces don't count towards the history of recently-viewed workspaces. This is done by remembering the tag-order of the original windowset and then restoring that at the end. This is a breaking change, insofar as it changes the type signatures of the exported functions `recentWS`, `cycleWindowSets`, and `toggleWindowSets` to return a list of `WorkspaceId`s instead of a list of `WindowSet`s. Fixes: https://github.com/xmonad/xmonad-contrib/issues/504
xmonad-contrib: Third Party Extensions to the xmonad Window Manager
You need the ghc compiler and xmonad window manager installed in order to use these extensions.
For installation and configuration instructions, please see the xmonad website, the documents included with the xmonad source distribution, and the online haddock documentation.
Getting or Updating XMonadContrib
-
Latest release: https://hackage.haskell.org/package/xmonad-contrib
-
Git version: https://github.com/xmonad/xmonad-contrib
(To use git xmonad-contrib you must also use the git version of xmonad.)
Contributing
Haskell code contributed to this repo should live under the
appropriate subdivision of the XMonad
namespace (currently includes
Actions
, Config
, Hooks
, Layout
, Prompt
, and Util
). For
example, to use the Grid layout, one would import:
XMonad.Layout.Grid
For further details, see the documentation for the
XMonad.Doc.Developing
module, XMonad's CONTRIBUTING.md and the xmonad website.
License
Code submitted to the contrib repo is licensed under the same license as xmonad itself, with copyright held by the authors.