aboutsummaryrefslogtreecommitdiff
path: root/src/Rahm/Desktop/Keys.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Rahm/Desktop/Keys.hs')
-rw-r--r--src/Rahm/Desktop/Keys.hs44
1 files changed, 28 insertions, 16 deletions
diff --git a/src/Rahm/Desktop/Keys.hs b/src/Rahm/Desktop/Keys.hs
index 2f30763..6e16c25 100644
--- a/src/Rahm/Desktop/Keys.hs
+++ b/src/Rahm/Desktop/Keys.hs
@@ -5,6 +5,7 @@ import Data.Monoid (Endo(..))
import Control.Monad.Trans.Class
import Control.Monad.Reader
import Control.Monad.Writer
+import Control.Monad.Trans.Maybe
import Control.Monad.Loops (iterateWhile)
import Control.Monad.Fix (fix)
import Graphics.X11.ExtraTypes.XF86;
@@ -267,30 +268,38 @@ keymap = runKeys $ do
bind xK_g $ do
let selectWorkspace :: (KeySym, String) -> Maybe (X WorkspaceId)
selectWorkspace s = case s of
- (_, [ch]) | isAlphaNum ch -> Just $ return [ch]
+ (_, [ch]) | isAlphaNum ch || ch == '*' -> Just $ return [ch]
(_, "]") -> Just $ adjacentWorkspace next =<< getCurrentWorkspace
(_, "[") -> Just $ adjacentWorkspace prev =<< getCurrentWorkspace
(_, "}") -> Just $ adjacentScreen next
(_, "{") -> Just $ adjacentScreen prev
- (_, "/") -> Just $ runMaybeT $ do
- windowId <- askWindowId
- workspaceWithWindow askWindowId
+ (_, "^") -> Just firstWorkspaceId
+ (_, "$") -> Just lastWorkspaceId
+ (_, "/") -> Just $ do
+ cur <- getCurrentWorkspace
+ fromMaybe cur <$> runMaybeT (do
+ windowId <- MaybeT askWindowId
+ MaybeT $ workspaceWithWindow windowId)
(_, " ") -> Just $ accompaningWorkspace <$> getCurrentWorkspace
_ -> Nothing
justMod $
- doc "Goto a workspace\n\n\t\
-
- \If the second character typed is alpha-numeric, jump to that\n\t\
- \workspace. The workspace is created on-the-fly if such a workspace\n\t\
- \does not exist.\n\n\t\
-
- \If the second character typed is:\n\t\t\
- \]: go to the next workspace\n\t\t\
- \[: go to the previous workspace\n\t\t\
- \}: cycle the workspaces on the screens to the right\n\t\t\
- \{: cycle the workspaces on the screens to the left\n\t\t\
- \<space>: Jump to the accompaning workspace.\n\t\t\
+ doc "Goto/Send/Etc To a workspace\n\n\t\
+
+ \Workspaces are alphanumeric characters. So if the next key typed is an\n\t\
+ \alphanumeric character, that's the workspace to operate on\n\n\
+
+ \The following special characters can also reference workspaces:\n\t\t\
+ \]: The next non-visible workspace\n\t\t\
+ \[: The previous non-visible workspace\n\t\t\
+ \}: The workspace on the screen to the right\n\t\t\
+ \{: The workspace on the screen to the left\n\t\t\
+ \<space>: The accompaningWorkspace (toggled case)\n\t\t\
+ \/: Prompt to select a window, and reference that workspace\n\t\t\
+ \^: The first populated workspace\n\t\t\
+ \$: The last populated workspace\n\t\t\
+ \*: The hidden workspace.\n\t\t\
+ \_: Black hole. Sending a window here closes it.\n\t\t\
\F1: display this help.\n" $
mapNextStringWithKeysym $ \_ keysym str ->
case ((keysym, str), selectWorkspace (keysym, str)) of
@@ -308,6 +317,7 @@ keymap = runKeys $ do
mapNextStringWithKeysym $ \_ keysym str ->
case ((keysym, str), selectWorkspace (keysym, str)) of
(_, Just w) -> shiftToWorkspace =<< w
+ ((_, "_"), _) -> CopyWindow.kill1
_ -> return ()
controlMod $
@@ -332,6 +342,8 @@ keymap = runKeys $ do
mapNextStringWithKeysym $ \_ keysym str ->
case ((keysym, str), selectWorkspace (keysym, str)) of
(_, Just ws) -> swapWorkspace =<< ws
+ ((_, "_"), _) ->
+ mapM_ (\w -> focus w >> CopyWindow.kill1) =<< windowsInCurrentWorkspace
_ -> return ()
bind xK_h $ do