mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 11:30:22 -07:00
WARNING! This change will break existing Tabbed configurations. The problem is that there is no way within a Layout's "doLayout" to safely modify the layout itself. This makes LayoutHooks fragile, and more to the point, makes SimpleStacking fragile, so we can't safely define a tabbed' = simpleStacking . tabbed A workaround would have been to duplicate the tabbed code, but I'd rather leave the ugliness and get this fixed.
51 lines
2.0 KiB
Haskell
51 lines
2.0 KiB
Haskell
{-# 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 Control.Monad.State ( modify )
|
|
import qualified Data.Map as M
|
|
import Data.Maybe ( catMaybes )
|
|
|
|
import Data.List ( nub, lookup )
|
|
import StackSet ( focus, tag, workspace, current, integrate )
|
|
import Graphics.X11.Xlib ( Window )
|
|
|
|
import XMonad
|
|
|
|
-- $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 l = l { doLayout = dl
|
|
, modifyLayout = \m -> fmap (simpleStacking' st) `fmap` modifyLayout l m }
|
|
where dl r s = do modify $ \ state ->
|
|
state { layouts = M.adjust
|
|
(\(_,ss)->(simpleStacking'
|
|
(focus s:filter (`elem` integrate s) st) l,ss))
|
|
(tag.workspace.current.windowset $ state)
|
|
(layouts state) }
|
|
lo <- doLayout l r s
|
|
let m = map (\ (w,rr) -> (w,(w,rr))) lo
|
|
return $ catMaybes $ map ((flip lookup) m) $ nub (focus s : st ++ map fst lo)
|