- [
- ((modm .|. shiftMask, xK_h), spawn "xfce4-session-logout"),
- ((modm .|. shiftMask, xK_l), spawn "xscreensaver-command --lock"),
-
- ((modm, xK_n), spawn "xfce4-terminal"),
- ((modm, xK_i), spawn "firefox"),
-
- ((modm .|. shiftMask, xK_c ), kill),
- ((modm, xK_space ), sendMessage NextLayout),
- ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf),
- ((modm, xK_Tab ), windows W.focusDown),
- ((modm, xK_j ), windows W.focusDown),
- ((modm, xK_k ), windows W.focusUp ),
- ((modm, xK_m ), windows W.focusMaster ),
- ((modm, xK_Return), windows W.swapMaster),
- ((modm .|. shiftMask, xK_j ), windows W.swapDown ),
- ((modm .|. shiftMask, xK_k ), windows W.swapUp ),
- ((modm, xK_h ), sendMessage Shrink),
- ((modm, xK_l ), sendMessage Expand),
- ((modm, xK_t ), withFocused $ windows . W.sink),
- ((modm , xK_comma ), sendMessage (IncMasterN 1)),
- ((modm , xK_period), sendMessage (IncMasterN (-1))),
- ((modm , xK_b ), sendMessage ToggleStruts),
- ((modm , xK_z ), sendMessage Mag.Toggle)
- ]
- ++
-
- -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
- -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
- [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
- | (key, sc) <- zip [xK_o, xK_e, xK_u] [0..]
- , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]
- ]
- ++
-
- -- mod-[1..9], Switch to workspace N
- -- mod-shift-[1..9], Move client to workspace N
- [((m .|. modm, k), windows $ f i)
- | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
- , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]
- ]
-
+ [
+ ((modm .|. shiftMask, xK_h), spawn "xfce4-session-logout"),
+ ((modm .|. shiftMask, xK_l), spawn "xscreensaver-command --lock"),
+ ((modm .|. shiftMask, xK_r), spawn "xmonad --restart"),
+
+ ((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"),
+
+ ((modm .|. shiftMask, xK_c ), kill),
+ ((modm, xK_space ), sendMessage NextLayout),
+ ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf),
+ ((modm, xK_j ), windows W.focusDown),
+ ((modm, xK_k ), windows W.focusUp ),
+ ((modm, xK_m ), windows W.focusMaster ),
+ ((modm, xK_Return), windows W.swapMaster),
+ ((modm .|. shiftMask, xK_j ), windows W.swapDown ),
+ ((modm .|. shiftMask, xK_k ), windows W.swapUp ),
+ ((modm, xK_h ), sendMessage Shrink),
+ ((modm, xK_l ), sendMessage Expand),
+ ((modm, xK_t ), withFocused $ windows . W.sink),
+ ((modm , xK_comma ), sendMessage (IncMasterN 1)),
+ ((modm , xK_period), sendMessage (IncMasterN (-1))),
+ ((modm , xK_b ), sendMessage ToggleStruts),
+ ((modm , xK_z ), sendMessage Mag.Toggle),
+ ((modm , xK_a), cycleRecentWorkspaceOnSingleScreen [xK_Super_L] xK_a xK_a)
+ ]
+ ++
+
+ -- mod-{o,e,u}, Switch to physical/Xinerama screens 1, 2, or 3
+ -- 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)]
+ ]
+ ++
+
+ -- mod-[1..9], Switch to workspace N
+ -- mod-shift-[1..9], Move client to workspace N
+ [((m .|. modm, k), windows $ f i)
+ | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
+ , (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)]