{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, TypeSynonymInstances #-}
------------------------------------------------------------------------------
-- |
-- Module : Layout
-- Copyright : (c) Mads N Noe 2009
-- Maintainer : mntnoe (@) gmail.com
-- License : as-is
--
-- Custom layout algorithms.
--
------------------------------------------------------------------------------
module Layout (
MyAccordion(..)
) where
-- XMonad modules
import XMonad
import qualified XMonad.StackSet as W
-- Hacked Accordion layout. Useful for LaTeX editing, where you switch between
-- an editor window and a preview window. Only the ratios are modified. This
-- hack does not space windows evenly when the workspace contains more than two
-- windows, but fixing it would require a rewrite. Accordion originally by
-- <glasser (@) mit.edu>.
data MyAccordion a = MyAccordion deriving ( Read, Show )
instance LayoutClass MyAccordion Window where
pureLayout _ sc ws = zip ups tops ++ [(W.focus ws, mainPane)] ++ zip dns bottoms
where
ups = W.up ws
dns = W.down ws
(top, allButTop) = splitVerticallyBy (1/3) sc
(center, bottom) = splitVerticallyBy (1/2) allButTop
(allButBottom, _) = splitVerticallyBy (2/3) sc
mainPane | ups /= [] && dns /= [] = center
| ups /= [] = allButTop
| dns /= [] = allButBottom
| otherwise = sc
tops = if ups /= [] then splitVertically (length ups) top else []
bottoms = if dns /= [] then splitVertically (length dns) bottom else []
description _ = "Accordion"