diff --git a/CHANGES.md b/CHANGES.md index d845f42d..438a6d6b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -76,6 +76,11 @@ - Deprecated the entire module, use `XMonad.Actions.WithAll` instead. + * `XMonad.Layout.Circle`: + + - Deprecated the entire module, use the `circle` function from + `XMonad.Layout.CircleEx` instead. + * `XMonad.Hooks.EwmhDesktops` - `_NET_CLIENT_LIST_STACKING` puts windows in the current workspace at the diff --git a/XMonad/Layout/Circle.hs b/XMonad/Layout/Circle.hs index 29dfb1b7..511e92f3 100644 --- a/XMonad/Layout/Circle.hs +++ b/XMonad/Layout/Circle.hs @@ -1,4 +1,5 @@ {-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-} +{-# LANGUAGE PatternSynonyms #-} ----------------------------------------------------------------------------- -- | @@ -15,15 +16,14 @@ -- ----------------------------------------------------------------------------- -module XMonad.Layout.Circle ( - -- * Usage - -- $usage - Circle (..) - ) where -- actually it's an ellipse +module XMonad.Layout.Circle {-# DEPRECATED "Use XMonad.Layout.CircleEx instead" #-} + ( -- * Usage + -- $usage + pattern Circle + ) where -- actually it's an ellipse -import XMonad.Prelude -import XMonad -import XMonad.StackSet (integrate, peek) +import GHC.Real (Ratio(..)) +import XMonad.Layout.CircleEx -- $usage -- You can use this module with the following in your @~\/.xmonad\/xmonad.hs@: @@ -39,37 +39,6 @@ import XMonad.StackSet (integrate, peek) -- and -- "XMonad.Doc.Extending#Editing_the_layout_hook". -data Circle a = Circle deriving ( Read, Show ) +pattern Circle :: CircleEx a +pattern Circle = CircleEx 1 (70 :% 99) (2 :% 5) 1 0 -instance LayoutClass Circle Window where - doLayout Circle r s = do layout <- raiseFocus $ circleLayout r $ integrate s - return (layout, Nothing) - -circleLayout :: Rectangle -> [a] -> [(a, Rectangle)] -circleLayout _ [] = [] -circleLayout r (w:ws) = master : rest - where master = (w, center r) - rest = zip ws $ map (satellite r) [0, pi * 2 / fromIntegral (length ws) ..] - -raiseFocus :: [(Window, Rectangle)] -> X [(Window, Rectangle)] -raiseFocus xs = do focused <- withWindowSet (return . peek) - return $ case find ((== focused) . Just . fst) xs of - Just x -> x : delete x xs - Nothing -> xs - -center :: Rectangle -> Rectangle -center (Rectangle sx sy sw sh) = Rectangle x y w h - where s = sqrt 2 :: Double - w = round (fromIntegral sw / s) - h = round (fromIntegral sh / s) - x = sx + fromIntegral (sw - w) `div` 2 - y = sy + fromIntegral (sh - h) `div` 2 - -satellite :: Rectangle -> Double -> Rectangle -satellite (Rectangle sx sy sw sh) a = Rectangle (sx + round (rx + rx * cos a)) - (sy + round (ry + ry * sin a)) - w h - where rx = fromIntegral (sw - w) / 2 - ry = fromIntegral (sh - h) / 2 - w = sw * 10 `div` 25 - h = sh * 10 `div` 25 diff --git a/XMonad/Layout/CircleEx.hs b/XMonad/Layout/CircleEx.hs index 72e4677f..34bb69bb 100644 --- a/XMonad/Layout/CircleEx.hs +++ b/XMonad/Layout/CircleEx.hs @@ -97,7 +97,7 @@ data CircleEx a = CircleEx -- * @cMultiplier@ is set to 1, which means all secondary windows -- will have the same size -- --- This can be used as a drop-in replacement for "XMonad.Layout.Circle.Circle". +-- This can be used as a drop-in replacement for "XMonad.Layout.Circle". circle :: CircleEx a circle = CircleEx 1 (70%99) (2%5) 1 0 diff --git a/XMonad/Layout/DecorationMadness.hs b/XMonad/Layout/DecorationMadness.hs index d17e621f..ea2663eb 100644 --- a/XMonad/Layout/DecorationMadness.hs +++ b/XMonad/Layout/DecorationMadness.hs @@ -17,7 +17,7 @@ module XMonad.Layout.DecorationMadness ( -- * Usage -- $usage - -- * Decorated layouts based on Circle + -- * Decorated layouts based on CircleEx -- $circle circleSimpleDefault , circleDefault @@ -94,7 +94,7 @@ import XMonad.Layout.SimpleDecoration import XMonad.Layout.TabBarDecoration import XMonad.Layout.Accordion -import XMonad.Layout.Circle +import XMonad.Layout.CircleEx import XMonad.Layout.WindowArranger import XMonad.Layout.SimpleFloat @@ -132,39 +132,39 @@ import XMonad.Layout.SimpleFloat -- "XMonad.Util.Themes" -- $circle --- Here you will find 'Circle' based decorated layouts. +-- Here you will find 'CircleEx' based decorated layouts. --- | A 'Circle' layout with the xmonad default decoration, default +-- | A 'CircleEx' layout with the xmonad default decoration, default -- theme and default shrinker. -- -- Here you can find a screen shot: -- -- -circleSimpleDefault :: ModifiedLayout (Decoration DefaultDecoration DefaultShrinker) Circle Window -circleSimpleDefault = decoration shrinkText def DefaultDecoration Circle +circleSimpleDefault :: ModifiedLayout (Decoration DefaultDecoration DefaultShrinker) CircleEx Window +circleSimpleDefault = decoration shrinkText def DefaultDecoration circle -- | Similar to 'circleSimpleDefault' but with the possibility of -- setting a custom shrinker and a custom theme. circleDefault :: Shrinker s => s -> Theme - -> ModifiedLayout (Decoration DefaultDecoration s) Circle Window -circleDefault s t = decoration s t DefaultDecoration Circle + -> ModifiedLayout (Decoration DefaultDecoration s) CircleEx Window +circleDefault s t = decoration s t DefaultDecoration circle --- | A 'Circle' layout with the xmonad simple decoration, default +-- | A 'CircleEx' layout with the xmonad simple decoration, default -- theme and default shrinker. -- -- Here you can find a screen shot: -- -- -circleSimpleDeco :: ModifiedLayout (Decoration SimpleDecoration DefaultShrinker) Circle Window -circleSimpleDeco = decoration shrinkText def (Simple True) Circle +circleSimpleDeco :: ModifiedLayout (Decoration SimpleDecoration DefaultShrinker) CircleEx Window +circleSimpleDeco = decoration shrinkText def (Simple True) circle -- | Similar to 'circleSimpleDece' but with the possibility of -- setting a custom shrinker and a custom theme. circleDeco :: Shrinker s => s -> Theme - -> ModifiedLayout (Decoration SimpleDecoration s) Circle Window -circleDeco s t = decoration s t (Simple True) Circle + -> ModifiedLayout (Decoration SimpleDecoration s) CircleEx Window +circleDeco s t = decoration s t (Simple True) circle --- | A 'Circle' layout with the xmonad default decoration, default +-- | A 'CircleEx' layout with the xmonad default decoration, default -- theme and default shrinker, but with the possibility of moving -- windows with the mouse, and resize\/move them with the keyboard. -- @@ -172,17 +172,17 @@ circleDeco s t = decoration s t (Simple True) Circle -- -- circleSimpleDefaultResizable :: ModifiedLayout (Decoration DefaultDecoration DefaultShrinker) - (ModifiedLayout MouseResize (ModifiedLayout WindowArranger Circle)) Window -circleSimpleDefaultResizable = decoration shrinkText def DefaultDecoration (mouseResize $ windowArrange Circle) + (ModifiedLayout MouseResize (ModifiedLayout WindowArranger CircleEx)) Window +circleSimpleDefaultResizable = decoration shrinkText def DefaultDecoration (mouseResize $ windowArrange circle) -- | Similar to 'circleSimpleDefaultResizable' but with the -- possibility of setting a custom shrinker and a custom theme. circleDefaultResizable :: Shrinker s => s -> Theme -> ModifiedLayout (Decoration DefaultDecoration s) - (ModifiedLayout MouseResize (ModifiedLayout WindowArranger Circle)) Window -circleDefaultResizable s t = decoration s t DefaultDecoration (mouseResize $ windowArrange Circle) + (ModifiedLayout MouseResize (ModifiedLayout WindowArranger CircleEx)) Window +circleDefaultResizable s t = decoration s t DefaultDecoration (mouseResize $ windowArrange circle) --- | A 'Circle' layout with the xmonad simple decoration, default +-- | A 'CircleEx' layout with the xmonad simple decoration, default -- theme and default shrinker, but with the possibility of moving -- windows with the mouse, and resize\/move them with the keyboard. -- @@ -190,45 +190,45 @@ circleDefaultResizable s t = decoration s t DefaultDecoration (mouseResize $ win -- -- circleSimpleDecoResizable :: ModifiedLayout (Decoration SimpleDecoration DefaultShrinker) - (ModifiedLayout MouseResize (ModifiedLayout WindowArranger Circle)) Window -circleSimpleDecoResizable = decoration shrinkText def (Simple True) (mouseResize $ windowArrange Circle) + (ModifiedLayout MouseResize (ModifiedLayout WindowArranger CircleEx)) Window +circleSimpleDecoResizable = decoration shrinkText def (Simple True) (mouseResize $ windowArrange circle) -- | Similar to 'circleSimpleDecoResizable' but with the -- possibility of setting a custom shrinker and a custom theme. circleDecoResizable :: Shrinker s => s -> Theme -> ModifiedLayout (Decoration SimpleDecoration s) - (ModifiedLayout MouseResize (ModifiedLayout WindowArranger Circle)) Window -circleDecoResizable s t = decoration s t (Simple True) (mouseResize $ windowArrange Circle) + (ModifiedLayout MouseResize (ModifiedLayout WindowArranger CircleEx)) Window +circleDecoResizable s t = decoration s t (Simple True) (mouseResize $ windowArrange circle) --- | A 'Circle' layout with the xmonad DwmStyle decoration, default +-- | A 'CircleEx' layout with the xmonad DwmStyle decoration, default -- theme and default shrinker. -- -- Here you can find a screen shot: -- -- -circleSimpleDwmStyle :: ModifiedLayout (Decoration DwmStyle DefaultShrinker) Circle Window -circleSimpleDwmStyle = decoration shrinkText def Dwm Circle +circleSimpleDwmStyle :: ModifiedLayout (Decoration DwmStyle DefaultShrinker) CircleEx Window +circleSimpleDwmStyle = decoration shrinkText def Dwm circle -- | Similar to 'circleSimpleDwmStyle' but with the -- possibility of setting a custom shrinker and a custom theme. circleDwmStyle :: Shrinker s => s -> Theme - -> ModifiedLayout (Decoration DwmStyle s) Circle Window -circleDwmStyle s t = decoration s t Dwm Circle + -> ModifiedLayout (Decoration DwmStyle s) CircleEx Window +circleDwmStyle s t = decoration s t Dwm circle --- | A 'Circle' layout with the xmonad tabbed decoration, default +-- | A 'CircleEx' layout with the xmonad tabbed decoration, default -- theme and default shrinker. -- -- Here you can find a screen shot: -- -- -circleSimpleTabbed :: ModifiedLayout (Decoration TabBarDecoration DefaultShrinker) (ModifiedLayout ResizeScreen Circle) Window -circleSimpleTabbed = simpleTabBar Circle +circleSimpleTabbed :: ModifiedLayout (Decoration TabBarDecoration DefaultShrinker) (ModifiedLayout ResizeScreen CircleEx) Window +circleSimpleTabbed = simpleTabBar circle -- | Similar to 'circleSimpleTabbed' but with the -- possibility of setting a custom shrinker and a custom theme. circleTabbed :: Shrinker s => s -> Theme - -> ModifiedLayout (Decoration TabBarDecoration s) (ModifiedLayout ResizeScreen Circle) Window -circleTabbed s t = tabBar s t Top (resizeVertical (fi $ decoHeight t) Circle) + -> ModifiedLayout (Decoration TabBarDecoration s) (ModifiedLayout ResizeScreen CircleEx) Window +circleTabbed s t = tabBar s t Top (resizeVertical (fi $ decoHeight t) circle) -- $accordion diff --git a/XMonad/Layout/SubLayouts.hs b/XMonad/Layout/SubLayouts.hs index 49556119..c12829e0 100644 --- a/XMonad/Layout/SubLayouts.hs +++ b/XMonad/Layout/SubLayouts.hs @@ -47,8 +47,6 @@ module XMonad.Layout.SubLayouts ( ) where -import XMonad.Layout.Circle () -- so haddock can find the link - import XMonad.Layout.Decoration(Decoration, DefaultShrinker) import XMonad.Layout.LayoutModifier(LayoutModifier(handleMess, modifyLayout, redoLayout), @@ -184,11 +182,11 @@ import qualified Data.Set as S -- [@outerLayout@] The layout that determines the rectangles given to each -- group. -- --- Ex. The second group is 'Tall', the third is 'Circle', all others are tabbed --- with: +-- Ex. The second group is 'Tall', the third is 'XMonad.Layout.CircleEx.circle', +-- all others are tabbed with: -- -- > myLayout = addTabs shrinkText def --- > $ subLayout [0,1,2] (Simplest ||| Tall 1 0.2 0.5 ||| Circle) +-- > $ subLayout [0,1,2] (Simplest ||| Tall 1 0.2 0.5 ||| circle) -- > $ Tall 1 0.2 0.5 ||| Full subLayout :: [Int] -> subl a -> l a -> ModifiedLayout (Sublayout subl) l a subLayout nextLayout sl = ModifiedLayout (Sublayout (I []) (nextLayout,sl) [])