diff options
author | Don Stewart <dons@cse.unsw.edu.au> | 2007-03-07 07:45:39 +0100 |
---|---|---|
committer | Don Stewart <dons@cse.unsw.edu.au> | 2007-03-07 07:45:39 +0100 |
commit | 62f312feef009b97199548248e6b4a40bca65d5f (patch) | |
tree | 01db2f25b437d942c856ce4774f510d4f242e59c /Main.hs | |
parent | d0fc61f3f0b3686aedc288e01b3ed4cf0fa48398 (diff) | |
download | xmonad-62f312feef009b97199548248e6b4a40bca65d5f.tar.gz xmonad-62f312feef009b97199548248e6b4a40bca65d5f.tar.xz xmonad-62f312feef009b97199548248e6b4a40bca65d5f.zip |
focus left and right (mod-j/mod-k)
darcs-hash:20070307064539-9c5c1-2578ea84009c449b3baeba8a58bfda5b39096fba.gz
Diffstat (limited to '')
-rw-r--r-- | Main.hs | 65 |
1 files changed, 27 insertions, 38 deletions
@@ -67,7 +67,9 @@ keys = [ (mod1Mask .|. shiftMask, xK_Return, spawn "xterm") , (mod1Mask, xK_p, spawn "exe=`dmenu_path | dmenu` && exec $exe") , (controlMask, xK_space, spawn "gmrun") - , (mod1Mask, xK_Tab, switch) + , (mod1Mask, xK_Tab, focus 1) + , (mod1Mask, xK_j, focus 1) + , (mod1Mask, xK_k, focus (-1)) , (mod1Mask .|. shiftMask, xK_q, io $ exitWith ExitSuccess) ] @@ -112,63 +114,50 @@ handle _ = return () -- --------------------------------------------------------------------- -- Managing windows --- | Modify the current window list with a pure funtion, and refresh -withWindows :: (Windows -> Windows) -> W () -withWindows f = do - modifyWindows f - refresh - --- | Run an action on the currently focused window -withCurrent :: (Window -> W ()) -> W () -withCurrent f = do - ws <- gets windows - case ws of - [] -> return () - (w:_) -> f w - -- -- | refresh. Refresh the currently focused window. Resizes to full -- screen and raises the window. -- refresh :: W () -refresh = withCurrent $ \w -> do - d <- gets display - sw <- gets screenWidth - sh <- gets screenHeight - io $ do moveResizeWindow d w 0 0 (fromIntegral sw) (fromIntegral sh) - raiseWindow d w +refresh = do + ws <- gets windows + case ws of + [] -> return () + (w:_) -> do + d <- gets display + sw <- liftM fromIntegral (gets screenWidth) + sh <- liftM fromIntegral (gets screenHeight) + io $ do moveResizeWindow d w 0 0 sw sh + raiseWindow d w + +-- | Modify the current window list with a pure funtion, and refresh +withWindows :: (Windows -> Windows) -> W () +withWindows f = do + modifyWindows f + refresh --- -- | manage. Add a new window to be managed --- manage :: Window -> W () manage w = do trace "manage" d <- gets display - withWindows $ \ws -> if w `elem` ws then ws else w:ws -- a set + withWindows (nub . (w :)) io $ mapWindow d w --- -- | unmanage, a window no longer exists, remove it from the stack --- unmanage :: Window -> W () unmanage w = do dpy <- gets display - io $ grabServer dpy - modifyWindows (filter (/= w)) - io $ sync dpy False - io $ ungrabServer dpy - refresh + io $ do grabServer dpy + sync dpy False + ungrabServer dpy + withWindows $ filter (/= w) --- --- | switch. switch focus to next window in list. +-- | focus. focus to window at offset 'n' in list. -- The currently focused window is always the head of the list --- -switch :: W () -switch = withWindows rotate +focus :: Int -> W () +focus n = withWindows (rotate n) --- -- | spawn. Launch an external application --- spawn :: String -> W () spawn = io_ . runCommand |