aboutsummaryrefslogtreecommitdiffstats
path: root/SimpleStacking.hs
blob: 927d287335643241e741d7cc9a0b9dc0afb3051d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
{-# OPTIONS -fglasgow-exts #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  XMonadContrib.SimpleStacking
-- Copyright   :  (c) David Roundy <droundy@darcs.net>
-- License     :  BSD-style (see LICENSE)
-- 
-- Maintainer  :  David Roundy <droundy@darcs.net>
-- Stability   :  unstable
-- Portability :  unportable
--
-- A module to be used to obtain a simple "memory" of stacking order.
--
-----------------------------------------------------------------------------

module XMonadContrib.SimpleStacking (
                                     -- * Usage
                                     -- $usage 
                                     simpleStacking
                                    ) where

import Data.Maybe ( catMaybes )

import Data.List ( nub, lookup )
import StackSet ( focus, up, down )
import Graphics.X11.Xlib ( Window )

import XMonad
import XMonadContrib.LayoutHelpers

-- $usage
-- You can use this module for 
-- See, for instance, "XMonadContrib.Tabbed"

simpleStacking :: Layout Window -> Layout Window
simpleStacking = simpleStacking' []

simpleStacking' :: [Window] -> Layout Window -> Layout Window
simpleStacking' st = layoutModify dl idModMod
    where dl _ s wrs = let m = map (\ (w,rr) -> (w,(w,rr))) wrs
                           wrs' = catMaybes $ map ((flip lookup) m) $
                                  nub (focus s : st ++ map fst wrs)
                           st' = focus s:filter (`elem` (up s++down s)) st
                       in return (wrs', Just (simpleStacking' st'))