summaryrefslogtreecommitdiffstats
path: root/StackSet.hs
diff options
context:
space:
mode:
authorDon Stewart <dons@galois.com>2007-09-27 23:39:37 +0200
committerDon Stewart <dons@galois.com>2007-09-27 23:39:37 +0200
commit2e8e838e35d52566c8d633893c01b622ce61fded (patch)
tree5b4e05656bf8ad0dedcc7969972689adc823c049 /StackSet.hs
parent8c170f60a9eeee32e711a13434e32b82f34fef3d (diff)
downloadmetatile-2e8e838e35d52566c8d633893c01b622ce61fded.tar
metatile-2e8e838e35d52566c8d633893c01b622ce61fded.zip
Add StackSet.focusMaster (mod-m) to move focus to master
darcs-hash:20070927213937-cba2c-9b0d13cac79e9fb142c3a97cc6569f8a15297603
Diffstat (limited to 'StackSet.hs')
-rw-r--r--StackSet.hs21
1 files changed, 14 insertions, 7 deletions
diff --git a/StackSet.hs b/StackSet.hs
index 7a4c392..8e806d4 100644
--- a/StackSet.hs
+++ b/StackSet.hs
@@ -23,14 +23,14 @@ module StackSet (
-- * Operations on the current stack
-- $stackOperations
peek, index, integrate, integrate', differentiate,
- focusUp, focusDown,
+ focusUp, focusDown, focusMaster,
focusWindow, tagMember, member, findIndex,
-- * Modifying the stackset
-- $modifyStackset
insertUp, delete, delete', filter,
-- * Setting the master window
-- $settingMW
- swapMaster, swapUp, swapDown, modify, modify', float, sink, -- needed by users
+ swapUp, swapDown, swapMaster, modify, modify', float, sink, -- needed by users
-- * Composite operations
-- $composite
shift, shiftWin
@@ -463,11 +463,11 @@ delete w = sink w . delete' w
-- | Only temporarily remove the window from the stack, thereby not destroying special
-- information saved in the Stackset
delete' :: (Ord a, Eq s) => a -> StackSet i a s sd -> StackSet i a s sd
-delete' w s = s { current = removeFromScreen (current s)
- , visible = map removeFromScreen (visible s)
- , hidden = map removeFromWorkspace (hidden s) }
+delete' w s = s { current = removeFromScreen (current s)
+ , visible = map removeFromScreen (visible s)
+ , hidden = map removeFromWorkspace (hidden s) }
where removeFromWorkspace ws = ws { stack = stack ws >>= filter (/=w) }
- removeFromScreen scr = scr { workspace = removeFromWorkspace (workspace scr) }
+ removeFromScreen scr = scr { workspace = removeFromWorkspace (workspace scr) }
------------------------------------------------------------------------
@@ -489,9 +489,16 @@ sink w s = s { floating = M.delete w (floating s) }
swapMaster :: StackSet i a s sd -> StackSet i a s sd
swapMaster = modify' $ \c -> case c of
Stack _ [] _ -> c -- already master.
- Stack t ls rs -> Stack t [] (ys ++ x : rs) where (x:ys) = reverse ls
+ Stack t ls rs -> Stack t [] (xs ++ x : rs) where (x:xs) = reverse ls
-- natural! keep focus, move current to the top, move top to current.
+
+-- | /O(s)/. Set focus to the master window.
+focusMaster :: StackSet i a s sd -> StackSet i a s sd
+focusMaster = modify' $ \c -> case c of
+ Stack _ [] _ -> c
+ Stack t ls rs -> Stack x [] (xs ++ t : rs) where (x:xs) = reverse ls
+
--
-- ---------------------------------------------------------------------
-- $composite