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.hs70
1 files changed, 23 insertions, 47 deletions
diff --git a/src/Rahm/Desktop/Keys.hs b/src/Rahm/Desktop/Keys.hs
index 74960df..1369a17 100644
--- a/src/Rahm/Desktop/Keys.hs
+++ b/src/Rahm/Desktop/Keys.hs
@@ -6,7 +6,6 @@ import Control.Monad.Fix (fix)
import Control.Monad.Loops (iterateWhile)
import Control.Monad.Reader
import Control.Monad.Trans.Class
-import Control.Monad.Trans.Maybe
import Control.Monad.Writer
import Data.Char
import Data.List hiding ((!!))
@@ -49,7 +48,7 @@ import Rahm.Desktop.Layout.Hole (toggleHole)
import Rahm.Desktop.Layout.List (toNextLayout, toPreviousLayout, toFirstLayout, toIndexedLayout)
import Rahm.Desktop.Layout.Pop (togglePop)
import Rahm.Desktop.Layout.Rotate (rotateLayout)
-import Rahm.Desktop.Lib
+import Rahm.Desktop.Common
import Rahm.Desktop.Logger
import Rahm.Desktop.Marking
import Rahm.Desktop.MouseMotion
@@ -142,30 +141,13 @@ keymap = runKeys $ do
bind xK_apostrophe $ do
justMod $
doc "Jumps between marks." $
- mapNextString $ \_ str ->
- case str of
- ['\''] -> jumpToLastLocation
- [ch] | isAlphaNum ch -> jumpToMark ch
- "[" -> historyBack
- "]" -> historyForward
- _ -> return ()
+ mapNextString $ const (mapM_ focusLocation <=< markToLocation)
shiftMod $
- doc "Move the marked windo to the current workspace." $
- mapNextString $ \_ str ->
- case str of
- [ch] | isAlphaNum ch -> do
- ws <- getCurrentWorkspace
- maybe (return ()) (windows . W.shiftWin ws) =<< markToWindow ch
- _ -> return ()
-
- controlMod $
- doc "Swap the current window with a mark." $
- mapNextString $ \_ str ->
- case str of
- -- ['\''] -> swapWithLastMark
- [ch] | isAlphaNum ch -> swapWithMark ch
- _ -> return ()
+ doc "Move the marked window to the current workspace." $
+ mapNextString $ \_ str -> do
+ mapM_ (\loc -> moveLocationToWorkspace loc <$> getCurrentWorkspace)
+ =<< markToLocation str
bind xK_BackSpace $ do
-- The only raw keybinding. Meant to get a terminal to unbrick XMonad if
@@ -275,23 +257,6 @@ keymap = runKeys $ do
sendMessage flipHorizontally
bind xK_g $ do
- let selectWorkspace :: (KeySym, String) -> Maybe (X WorkspaceId)
- selectWorkspace s = case s of
- (_, [ch]) | isAlphaNum ch || ch == '*' -> Just $ return [ch]
- (_, "]") -> Just $ adjacentWorkspaceNotVisible next
- =<< getCurrentWorkspace
- (_, "[") -> Just $ adjacentWorkspaceNotVisible prev
- =<< getCurrentWorkspace
- (_, ")") -> Just $ adjacentWorkspace next =<< getCurrentWorkspace
- (_, "(") -> Just $ adjacentWorkspace prev =<< getCurrentWorkspace
- (_, "}") -> Just $ adjacentScreen next
- (_, "{") -> Just $ adjacentScreen prev
- (_, "^") -> Just firstWorkspaceId
- (_, "$") -> Just lastWorkspaceId
- (_, "/") -> Just $ fromMaybe <$> getCurrentWorkspace <*> runMaybeT (
- (MaybeT . workspaceWithWindow) =<< MaybeT askWindowId)
- (_, " ") -> Just $ accompaningWorkspace <$> getCurrentWorkspace
- _ -> Nothing
justMod $
doc "Goto/Send/Etc To a workspace\n\n\t\
@@ -315,7 +280,7 @@ keymap = runKeys $ do
\Other keybindings starting with H-g\n\t\t\
\F1: display this help.\n\n\t" $
mapNextStringWithKeysym $ \_ keysym str ->
- case ((keysym, str), selectWorkspace (keysym, str)) of
+ case ((keysym, str), selectWorkspace str) of
(_, Just w) -> gotoWorkspace =<< w
-- Test binding. Tests that I can still submap keysyms alone (keys
-- where XLookupString won't return anything helpful.)
@@ -328,7 +293,7 @@ keymap = runKeys $ do
shiftMod $
doc "Move the currently focused window to another workspace" $
mapNextStringWithKeysym $ \_ keysym str ->
- case ((keysym, str), selectWorkspace (keysym, str)) of
+ case ((keysym, str), selectWorkspace str) of
(_, Just w) -> shiftToWorkspace =<< w
((_, "_"), _) -> CopyWindow.kill1
_ -> return ()
@@ -336,7 +301,7 @@ keymap = runKeys $ do
controlMod $
doc "Move the current focused window to another workspace and view that workspace" $
mapNextStringWithKeysym $ \_ keysym str ->
- case ((keysym, str), selectWorkspace (keysym, str)) of
+ case ((keysym, str), selectWorkspace str) of
(_, Just w) -> do
ws <- w
shiftToWorkspace ws
@@ -346,14 +311,14 @@ keymap = runKeys $ do
altMod $
doc "Copy a window to the given workspace" $
mapNextStringWithKeysym $ \_ keysym str ->
- case ((keysym, str), selectWorkspace (keysym, str)) of
+ case ((keysym, str), selectWorkspace str) of
(_, Just ws) -> windows . CopyWindow.copy =<< ws
_ -> return ()
shiftAltMod $
doc "Swap this workspace with another workspace (rename)." $
mapNextStringWithKeysym $ \_ keysym str ->
- case ((keysym, str), selectWorkspace (keysym, str)) of
+ case ((keysym, str), selectWorkspace str) of
(_, Just ws) -> swapWorkspace =<< ws
((_, "_"), _) ->
mapM_ (\w -> focus w >> CopyWindow.kill1) =<< windowsInCurrentWorkspace
@@ -419,7 +384,7 @@ keymap = runKeys $ do
doc "Mark the current window with the next typed character." $
mapNextString $ \_ str ->
case str of
- [ch] | isAlphaNum ch -> markCurrentWindow ch
+ [ch] | isAlpha ch -> markCurrentWindow str
_ -> return ()
bind xK_plus $ do
@@ -452,6 +417,17 @@ keymap = runKeys $ do
sendMessage rotateLayout
bind xK_s $ do
+ justMod $
+ mapNextString $ \_ mark -> do
+ loc' <- markToLocation mark
+ case loc' of
+ Nothing -> return ()
+ Just loc -> do
+ mapM_ setAlternateWindow (locationWindow loc)
+ mapNextString $ \_ ws -> do
+ mapM_ (moveLocationToWorkspace loc=<<) (selectWorkspace ws)
+
+
altMod $ spawnX "sudo -A systemctl suspend && xsecurelock"
bind xK_space $ do