]> code.delx.au - dotfiles/blobdiff - .xmonad/xmonad.hs
xmonad: fix screen switching keybindings
[dotfiles] / .xmonad / xmonad.hs
index d36078b694fd103c1a7bbd9606abd4473cfd9db3..05989b5e28631c5e1ce1539bdcdda5d2e1aea4e2 100644 (file)
@@ -3,6 +3,7 @@ import System.IO
 import XMonad
 import XMonad.Actions.CycleRecentWS
 import XMonad.Actions.PhysicalScreens
+import XMonad.Config.Desktop
 import XMonad.Hooks.DynamicLog
 import XMonad.Hooks.EwmhDesktops
 import XMonad.Hooks.ICCCMFocus
@@ -32,6 +33,7 @@ myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
 
         ((modm, xK_n), spawn "xfce4-terminal"),
         ((modm, xK_i), spawn "firefox"),
+        ((modm .|. shiftMask, xK_i), spawn "firefox --private-window"),
         ((modm, xK_c), spawn "emacsclient --create-frame --no-wait"),
         ((modm, xK_p), spawn "kupfer"),
 
@@ -51,7 +53,7 @@ myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
         ((modm , xK_period), sendMessage (IncMasterN (-1))),
         ((modm , xK_b ), sendMessage ToggleStruts),
         ((modm , xK_z ), sendMessage Mag.Toggle),
-        ((modm , xK_a), cycleRecentWS [xK_Super_L] xK_a xK_a)
+        ((modm , xK_a), cycleRecentWorkspaceOnSingleScreen [xK_Super_L] xK_a xK_a)
     ]
     ++
 
@@ -59,8 +61,7 @@ myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
     -- mod-shift-{o,e,u}, Move client to screen 1, 2, or 3
     [((m .|. modm, key), f sc)
         | (key, sc) <- zip [xK_o, xK_e, xK_u] [0..]
-        , (f, m) <- [(viewScreen, 0), (sendToScreen, shiftMask)]
-    ]
+        , (f, m) <- [(viewScreen def, 0), (sendToScreen def, shiftMask)]]
     ++
 
     -- mod-[1..9], Switch to workspace N
@@ -70,6 +71,10 @@ myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
         , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]
     ]
 
+cycleRecentWorkspaceOnSingleScreen = cycleWindowSets options
+    where
+        options w = map (W.view `flip` w) (recentTags w)
+        recentTags w = map W.tag $ W.hidden w ++ [W.workspace (W.current w)]
 
 avoidMaster = W.modify' $ \c -> case c of
     W.Stack t [] (r:rs) -> W.Stack t [r] rs
@@ -153,16 +158,14 @@ myGimpLayout = createLayout "Gimp" $
 
 myLayout =
     (
-        onWorkspace "1" (myTabbedLayout ||| myMasterTabbedLayout) $
-        onWorkspace "2" (myTabbedLayout ||| myMasterTabbedLayout) $
-        onWorkspace "9" (myFullLayout ||| myMasterTabbedLayout ||| myTabbedLayout ||| myTiledLayout ||| myGimpLayout) $
-        (myMasterTabbedLayout ||| myTabbedLayout ||| myTiledLayout)
+        onWorkspace "9" (myTabbedLayout ||| myFullLayout ||| myGimpLayout) $
+        (myTabbedLayout ||| myMasterTabbedLayout ||| myTiledLayout)
     )
 
 main = do
     xmonadDir <- getXMonadDir
     xmobars <- mapM (\x -> spawnPipe ("xmobar -x " ++ (show x) ++ " " ++ xmonadDir ++ "/xmobar.hs")) [1, 2]
-    xmonad $ ewmh defaultConfig {
+    xmonad $ desktopConfig {
         manageHook = myManageHook,
         layoutHook = myLayout,
         workspaces = myWorkspaces,
@@ -170,7 +173,7 @@ main = do
         startupHook = myStartupHook,
         keys = myKeys,
         modMask = mod4Mask,
-        handleEventHook = handleEventHook defaultConfig <+> fullscreenEventHook,
+        handleEventHook = handleEventHook desktopConfig <+> fullscreenEventHook,
         focusFollowsMouse = False
     }