-- xmonad configuration file.
--
--- Should work fine with xmonad 0.7 and above.
+-- Tested with xmonad 0.9, most settings should work fine with xmonad 0.7.
-- "hiding" necessary for LayoutCombinators.
--
-- The limit layout displays only one window in the lower pane, thanks to to
-- Qantourisc (2010-06-12 15:15 CEST) for the hint to use TwoPane.
-myLayoutHook = named "Default" (smartBorders $ Mirror tiled)
- ||| named "Full" (smartBorders Full)
- ||| named "Vertical" (smartBorders tiled)
- ||| named "Limit" (smartBorders $ Mirror $ TwoPane delta ratio)
+myLayoutHook =
+ named "Default" (smartBorders $ Mirror tiled)
+ ||| named "Full" (smartBorders Full)
+ ||| named "Vertical" (smartBorders tiled)
+ ||| named "Limit" (smartBorders $ Mirror $ TwoPane delta ratio)
where
-- Default tiling algorithm partitions the screen into two panes.
tiled = Tall nmaster delta ratio
nextLayoutIncluding layouts = do
cws <- gets (W.workspace . W.current . windowset)
sendMessageWithNoRefresh NextLayout cws
- nextLayoutIncluding' layouts
+ nextLayoutIncluding' layouts 1000 -- nobody has more than 1000 layouts
-nextLayoutIncluding' :: [String] -> X ()
-nextLayoutIncluding' layouts = do
+nextLayoutIncluding' :: [String] -> Int -> X ()
+nextLayoutIncluding' layouts iterations = do
cws <- gets (W.workspace . W.current . windowset)
- if not $ (description $ W.layout cws) `elem` layouts
+ -- iterations prevents an endless loop if no valid layout can be found.
+ if not ((description $ W.layout cws) `elem` layouts) && iterations > 0
-- Skip over excluded layouts.
then do
sendMessageWithNoRefresh NextLayout cws
- nextLayoutIncluding' layouts
+ nextLayoutIncluding' layouts (iterations - 1)
-- Found allowed layout, show it.
else refresh