xmonad 0.14.2 → 0.15
raw patch · 7 files changed
+46/−10 lines, 7 filesdep ~X11dep ~mtldep ~unixPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: X11, mtl, unix
API changes (from Hackage documentation)
+ XMonad.Operations: modifyWindowSet :: (WindowSet -> WindowSet) -> X ()
+ XMonad.Operations: windowBracket :: (a -> Bool) -> X a -> X a
+ XMonad.Operations: windowBracket_ :: X Any -> X ()
Files
- CHANGES.md +15/−0
- man/xmonad.1 +1/−1
- man/xmonad.1.html +2/−2
- man/xmonad.1.markdown +1/−1
- src/XMonad/Operations.hs +25/−4
- tests/Properties/Delete.hs +1/−1
- xmonad.cabal +1/−1
CHANGES.md view
@@ -2,6 +2,21 @@ ## unknown (unknown) +## 0.15 (September 30, 2018)++ * Reimplement `sendMessage` to deal properly with windowset changes made+ during handling.++ * Add new library functions `windowBracket` and `modifyWindowSet` to+ `XMonad.Operations`.++## 0.14.2 (August 21, 2018)++### Bug Fixes++ * Add the sample configuration file xmonad.hs again to the release tarball.+ [https://github.com/xmonad/xmonad/issues/181]+ ## 0.14.1 (August 20, 2018) ### Breaking Changes
man/xmonad.1 view
@@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc 2.2.1 .\"-.TH "XMONAD" "1" "20 August 2018" "Tiling Window Manager" ""+.TH "XMONAD" "1" "30 September 2018" "Tiling Window Manager" "" .hy .SH Name .PP
man/xmonad.1.html view
@@ -5,7 +5,7 @@ <meta name="generator" content="pandoc" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> <meta name="author" content="" />- <meta name="dcterms.date" content="2018-08-20" />+ <meta name="dcterms.date" content="2018-09-30" /> <title>XMONAD(1) Tiling Window Manager</title> <style type="text/css"> code{white-space: pre-wrap;}@@ -84,7 +84,7 @@ <header> <h1 class="title">XMONAD(1) Tiling Window Manager</h1> <p class="author"></p>-<p class="date">20 August 2018</p>+<p class="date">30 September 2018</p> </header> <nav id="TOC"> <ul>
man/xmonad.1.markdown view
@@ -1,6 +1,6 @@ % XMONAD(1) Tiling Window Manager %-% 20 August 2018+% 30 September 2018 # Name
src/XMonad/Operations.hs view
@@ -21,7 +21,7 @@ import qualified XMonad.StackSet as W import Data.Maybe-import Data.Monoid (Endo(..))+import Data.Monoid (Endo(..),Any(..)) import Data.List (nub, (\\), find) import Data.Bits ((.|.), (.&.), complement, testBit) import Data.Ratio@@ -30,6 +30,7 @@ import Control.Applicative((<$>), (<*>)) import Control.Arrow (second)+import Control.Monad (void) import Control.Monad.Reader import Control.Monad.State import qualified Control.Exception.Extensible as C@@ -176,6 +177,25 @@ unless isMouseFocused $ clearEvents enterWindowMask asks (logHook . config) >>= userCodeDef () +-- | Modify the @WindowSet@ in state with no special handling.+modifyWindowSet :: (WindowSet -> WindowSet) -> X ()+modifyWindowSet f = modify $ \xst -> xst { windowset = f (windowset xst) }++-- | Perform an @X@ action and check its return value against a predicate p.+-- If p holds, unwind changes to the @WindowSet@ and replay them using @windows@.+windowBracket :: (a -> Bool) -> X a -> X a+windowBracket p action = withWindowSet $ \old -> do+ a <- action+ when (p a) . withWindowSet $ \new -> do+ modifyWindowSet $ \_ -> old+ windows $ \_ -> new+ return a++-- | A version of @windowBracket@ that discards the return value, and handles an+-- @X@ action reporting its need for refresh via @Any@.+windowBracket_ :: X Any -> X ()+windowBracket_ = void . windowBracket getAny+ -- | Produce the actual rectangle from a screen and a ratio on that screen. scaleRationalRect :: Rectangle -> W.RationalRect -> Rectangle scaleRationalRect (Rectangle sx sy sw sh) (W.RationalRect rx ry rw rh)@@ -371,15 +391,16 @@ -- Message handling -- | Throw a message to the current 'LayoutClass' possibly modifying how we--- layout the windows, then refresh.+-- layout the windows, in which case changes are handled through a refresh. sendMessage :: Message a => a -> X ()-sendMessage a = do+sendMessage a = windowBracket_ $ do w <- W.workspace . W.current <$> gets windowset ml' <- handleMessage (W.layout w) (SomeMessage a) `catchX` return Nothing whenJust ml' $ \l' ->- windows $ \ws -> ws { W.current = (W.current ws)+ modifyWindowSet $ \ws -> ws { W.current = (W.current ws) { W.workspace = (W.workspace $ W.current ws) { W.layout = l' }}}+ return (Any $ isJust ml') -- | Send a message to all layouts, without refreshing. broadcastMessage :: Message a => a -> X ()
tests/Properties/Delete.hs view
@@ -18,7 +18,7 @@ where _ = x :: T -- delete is reversible with 'insert'.--- It is the identiy, except for the 'master', which is reset on insert and delete.+-- It is the identity, except for the 'master', which is reset on insert and delete. -- prop_delete_insert (x :: T) = case peek x of
xmonad.cabal view
@@ -1,5 +1,5 @@ name: xmonad-version: 0.14.2+version: 0.15 synopsis: A tiling window manager description: xmonad is a tiling window manager for X. Windows are arranged automatically to tile the screen without gaps or overlap, maximising