diff options
Diffstat (limited to 'src/Rahm/Desktop/Layout/ConsistentMosaic.hs')
| -rw-r--r-- | src/Rahm/Desktop/Layout/ConsistentMosaic.hs | 28 |
1 files changed, 9 insertions, 19 deletions
diff --git a/src/Rahm/Desktop/Layout/ConsistentMosaic.hs b/src/Rahm/Desktop/Layout/ConsistentMosaic.hs index 3dbc44c..0d95c8f 100644 --- a/src/Rahm/Desktop/Layout/ConsistentMosaic.hs +++ b/src/Rahm/Desktop/Layout/ConsistentMosaic.hs @@ -1,27 +1,23 @@ - -- This module provides a wrapper around the Mosaic layout to create a more -- consistent experience where instead of the windows being the ones it works -- on, it instead works on the window places so things like window swapping -- still work as expected. module Rahm.Desktop.Layout.ConsistentMosaic where -import XMonad -import qualified Rahm.Desktop.StackSet as W -import qualified Data.Map as Map import Data.Map (Map) +import qualified Data.Map as Map import Data.Maybe (mapMaybe) - -import XMonad.Layout.MosaicAlt - import Rahm.Desktop.Logger - +import qualified Rahm.Desktop.StackSet as W +import XMonad +import XMonad.Layout.MosaicAlt newtype MosaicWrap l a = MosaicWrap (l a) deriving (Read, Show) doAlt :: (Window -> HandleWindowAlt) -> X HandleWindowAlt doAlt f = do - (W.StackSet (W.Screen (W.Workspace _ _ mStack) _ _) _ _ _) - <- windowset <$> get + (W.StackSet (W.Screen (W.Workspace _ _ mStack) _ _) _ _ _) <- + windowset <$> get return $ case mStack of @@ -34,11 +30,9 @@ expandPositionAlt = doAlt expandWindowAlt shrinkPositionAlt :: X HandleWindowAlt shrinkPositionAlt = doAlt shrinkWindowAlt - instance (LayoutClass l a, Show a, Ord a, Enum a, Num a) => LayoutClass (MosaicWrap l) a where - runLayout (W.Workspace t (MosaicWrap l) (id -> Just s)) rect = do - let zs = zipStack [100..] s + let zs = zipStack [100 ..] s s' = fmap fst zs m = Map.fromList (W.integrate zs) @@ -48,18 +42,14 @@ instance (LayoutClass l a, Show a, Ord a, Enum a, Num a) => LayoutClass (MosaicW (,rect) <$> Map.lookup place m return (rects', MosaicWrap <$> maybeNewLayout) - where zipStack as (W.Stack b c d) = - let (cz, bz : dz) = splitAt (length c) as in - W.Stack (bz, b) (zip (reverse cz) c) (zip dz d) - - + let (cz, bz : dz) = splitAt (length c) as + in W.Stack (bz, b) (zip (reverse cz) c) (zip dz d) runLayout (W.Workspace t (MosaicWrap l) a) rect = do (rects, maybeNewLayout) <- runLayout (W.Workspace t l a) rect return (rects, MosaicWrap <$> maybeNewLayout) - -- By default just pass the message to the underlying layout. handleMessage (MosaicWrap l) mess = do maybeNewLayout <- handleMessage l mess |