summaryrefslogtreecommitdiffstats
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
parent8c170f60a9eeee32e711a13434e32b82f34fef3d (diff)
downloadmetatile-2e8e838e35d52566c8d633893c01b622ce61fded.tar
metatile-2e8e838e35d52566c8d633893c01b622ce61fded.zip
Add StackSet.focusMaster (mod-m) to move focus to master
darcs-hash:20070927213937-cba2c-9b0d13cac79e9fb142c3a97cc6569f8a15297603
-rw-r--r--Config.hs2
-rw-r--r--StackSet.hs21
2 files changed, 16 insertions, 7 deletions
diff --git a/Config.hs b/Config.hs
index ff31d07..9b02a92 100644
--- a/Config.hs
+++ b/Config.hs
@@ -143,6 +143,8 @@ keys = M.fromList $
, ((modMask, xK_Tab ), windows W.focusDown) -- %! Move focus to the next window
, ((modMask, xK_j ), windows W.focusDown) -- %! Move focus to the next window
, ((modMask, xK_k ), windows W.focusUp ) -- %! Move focus to the previous window
+ , ((modMask, xK_m ), windows W.focusMaster ) -- %! Move focus to the master window
+
-- modifying the window order
, ((modMask, xK_Return), windows W.swapMaster) -- %! Swap the focused window and the master window
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