X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=xmonad.hs;h=76f64d5243ac8973555ca00843e98a8a31d3929d;hb=2b561d0325948cd6a5ce155805a44723f1c6ede9;hp=d8f4d2dd9ad3859334387804ef4d171814f520cb;hpb=1a0152eee1680106831815834d8f06b878b3fea6;p=config%2Fdotfiles.git diff --git a/xmonad.hs b/xmonad.hs index d8f4d2d..76f64d5 100644 --- a/xmonad.hs +++ b/xmonad.hs @@ -1,6 +1,6 @@ --- XMonad configuration file. +-- xmonad configuration file. -- --- Should work fine with XMonad 0.7 and above. +-- Should work fine with xmonad 0.7 and above. -- "hiding" necessary for LayoutCombinators. @@ -25,6 +25,8 @@ import XMonad.Actions.CycleWS import XMonad.Layout.Named -- Necessary for JumpToLayout. import XMonad.Layout.LayoutCombinators +-- Necessary for Limit layout. +import XMonad.Layout.TwoPane -- Prevent new windows from spawning in the master pane. Taken from @@ -54,7 +56,13 @@ avoidMaster = W.modify' $ \c -> case c of -- -- named is used to name layouts which allows switching to a specific layout -- (see below), thanks to vav in #xmonad on Freenode (2011-06-12 22:28 CEST). -myLayoutHook = named "Default" (smartBorders $ Mirror tiled) ||| Full ||| named "Vertical" tiled +-- +-- The limit layout displays only one window in the lower pane, thanks to to +-- Qantourisc (2010-06-12 15:15 CEST) for the hint to use TwoPane. +myLayoutHook = named "Default" (smartBorders $ Mirror tiled) + ||| named "Full" (smartBorders Full) + ||| named "Vertical" (smartBorders tiled) + ||| named "Limit" (smartBorders $ Mirror $ TwoPane delta ratio) where -- Default tiling algorithm partitions the screen into two panes. tiled = Tall nmaster delta ratio @@ -90,23 +98,37 @@ myManageHook = composeOne , return True -?> doF W.focusDown ] --- Switch to next layout with descriptions in desc, other layouts are skipped. --- This allows switching to some layouts with mappings but excluding them from +-- Switch to next layout, but skip all layouts not in layouts argument. This +-- allows switching to some layouts with mappings but excluding them from -- meta-space (which gets mapped to this function). Thanks to aavogt in --- #xmonad on Freenode for this function (2010-06-13 12:45 CEST), modified to --- take list of layouts to switch to, not layouts to exclude. -nextLayoutIncluding descs = - do broadcastMessage NextLayout - d <- gets (description . W.layout . W.workspace . W.current . windowset) - if d `elem` descs - then refresh - else nextLayoutIncluding descs +-- #xmonad on Freenode for this function (2011-06-13 12:45 CEST) and +-- rootzlevel in #xmonad on Freenode for fixes (2011-06-13 15:20 CEST), +-- modified to take list of layouts to switch to, not layouts to exclude. +nextLayoutIncluding :: [String] -> X () +nextLayoutIncluding layouts = do + cws <- gets (W.workspace . W.current . windowset) + sendMessageWithNoRefresh NextLayout cws + nextLayoutIncluding' layouts + +nextLayoutIncluding' :: [String] -> X () +nextLayoutIncluding' layouts = do + cws <- gets (W.workspace . W.current . windowset) + if not $ (description $ W.layout cws) `elem` layouts + -- Skip over excluded layouts. + then do + sendMessageWithNoRefresh NextLayout cws + nextLayoutIncluding' layouts + -- Found allowed layout, show it. + else refresh myKeys = [ -- Switch to next layout, but only use the listed layouts. ((mod4Mask, xK_space), nextLayoutIncluding ["Default", "Full"]) -- Switch to vertical tiled layout. , ((mod4Mask, xK_v), sendMessage $ JumpToLayout "Vertical") + -- Switch to limit layout which displays only one window in the lower + -- pane. + , ((mod4Mask, xK_b), sendMessage $ JumpToLayout "Limit") -- Switch to last active workspace, thanks to moljac024 in #xmonad on -- Freenode (2010-12-18 14:45 CET). @@ -114,12 +136,12 @@ myKeys = [ ] ++ -- When using multiple screens, switching to another workspace causes - -- Xmonad to pull the workspace to the current screen if it was also + -- xmonad to pull the workspace to the current screen if it was also -- displayed on another one. This is confusing for me so the following -- code changes it to just switch to the screen where the workspace is -- already displayed. -- - -- Thanks to the Xmonad FAQ, read on 2010-06-16 13:42 CEST + -- Thanks to the xmonad FAQ, read on 2010-06-16 13:42 CEST -- (http://www.haskell.org/haskellwiki/Xmonad/Frequently_asked_questions). -- Thanks to MrElendig in #xmonad on Freenode (2010-06-17 17:16 CEST) to -- use the default XMonad workspaces. @@ -140,7 +162,7 @@ main = xmonad $ defaultConfig , manageHook = myManageHook -- Use unicode rxvt as my terminal. , terminal = "urxvt" - -- Necessary for Java so it recognizes XMonad as tiling window manager. + -- Necessary for Java so it recognizes xmonad as tiling window manager. , startupHook = setWMName "LG3D" } `additionalKeys` myKeys