diff options
Diffstat (limited to 'src/Internal/Keys.hs')
| -rw-r--r-- | src/Internal/Keys.hs | 98 |
1 files changed, 55 insertions, 43 deletions
diff --git a/src/Internal/Keys.hs b/src/Internal/Keys.hs index 49b85d1..467ed24 100644 --- a/src/Internal/Keys.hs +++ b/src/Internal/Keys.hs @@ -58,11 +58,17 @@ type KeyMap l = XConfig l -> Map (KeyMask, KeySym) (X ()) type ButtonsMap l = XConfig l -> Map (KeyMask, Button) (Window -> X ()) -decreaseVolume = spawn "pactl set-sink-volume @DEFAULT_SINK@ -5%" -increaseVolume = spawn "pactl set-sink-volume @DEFAULT_SINK@ +5%" -playPause = spawn "spotify-control play" -mediaPrev = spawn "spotify-control prev" -mediaNext = spawn "spotify-control next" +spawnX :: String -> X () +spawnX = spawn + +noWindow :: b -> Window -> b +noWindow = const + +decreaseVolume = spawnX "pactl set-sink-volume @DEFAULT_SINK@ -5%" +increaseVolume = spawnX "pactl set-sink-volume @DEFAULT_SINK@ +5%" +playPause = spawnX "spotify-control play" +mediaPrev = spawnX "spotify-control prev" +mediaNext = spawnX "spotify-control next" button6 :: Button @@ -95,12 +101,18 @@ button14 = 14 button15 :: Button button15 = 15 +resolveSubmaps :: (XConfig l -> KeyBindings) -> KeyMap l +resolveSubmaps bindings config = (fmap $ \binding -> + case binding of + Action x -> x + Submap _ -> logs "") (bindings config) + keymap :: KeyMap l -keymap = runKeys $ do +keymap = resolveSubmaps $ runKeys $ do config <- getConfig let defaultKey key = fromMaybe (return ()) $ Map.lookup key (keymap config) - subkeys = submapDefaultWithKey defaultKey . flip runKeys config + subkeys keysM = submapDefaultWithKey defaultKey $ (resolveSubmaps (runKeys keysM)) config bind xK_apostrophe $ do justMod $ subkeys $ do @@ -117,10 +129,10 @@ keymap = runKeys $ do -- The only raw keybinding. Meant to get a terminal to unbrick XMonad if -- something goes wrong with the keyboard layout and for first-time boots -- where dmenu/alacritty may not be installed. - rawMask mod4Mask $ spawn "xterm" + rawMask mod4Mask $ spawnX "xterm" -- Moves xmobar to different monitors. - justMod $ spawn "pkill -SIGUSR1 xmobar" + justMod $ spawnX "pkill -SIGUSR1 xmobar" bind xK_F1 $ do -- Experimental. Sends 'a' to all windows. @@ -172,7 +184,7 @@ keymap = runKeys $ do justMod $ sendMessage $ modifyWindowBorder (-5) bind xK_b $ do - justMod $ spawn "bluetooth-select.sh" + justMod $ spawnX "bluetooth-select.sh" bind xK_c $ do justMod runPassMenu @@ -212,7 +224,7 @@ keymap = runKeys $ do justMod $ windows W.focusUp shiftMod $ windows W.swapUp controlMod rotAllUp - altMod $ spawn "xsecurelock" + altMod $ spawnX "xsecurelock" bind xK_minus $ do justMod $ sendMessage (IncMasterN (-1)) @@ -233,7 +245,7 @@ keymap = runKeys $ do shiftMod $ withFocused $ sendMessage . expandWindowAlt bind xK_q $ do - shiftMod $ spawn "xmonad --recompile && xmonad --restart" + shiftMod $ spawnX "xmonad --recompile && xmonad --restart" justMod $ subkeys $ do @@ -253,16 +265,16 @@ keymap = runKeys $ do shiftMod $ sendMessage DoRotate bind xK_s $ do - altMod $ spawn "sudo -A systemctl suspend && xsecurelock" + altMod $ spawnX "sudo -A systemctl suspend && xsecurelock" bind xK_space $ do justMod $ sendMessage NextLayout shiftMod $ sendMessage NextLayout bind xK_t $ do - justMod $ spawn (terminal config) + justMod $ spawnX (terminal config) shiftMod $ withFocused $ windows . W.sink - altMod $ spawn (terminal config ++ " -t Floating\\ Term") + altMod $ spawnX (terminal config ++ " -t Floating\\ Term") bind xK_v $ -- Allows repeated strokes of M-h and M-l to reduce and increase volume @@ -299,7 +311,7 @@ keymap = runKeys $ do bind xK_p $ do (justMod -|- noMod) $ mapNextString $ \_ str -> - spawn $ printf "gxmessage 'typed: \"%s\"\ncodes: \"%s\"\nunicode: á\n'" + spawnX $ printf "gxmessage 'typed: \"%s\"\ncodes: \"%s\"\nunicode: á\n'" str (show (map ord str)) @@ -307,30 +319,30 @@ keymap = runKeys $ do (justMod -|- noMod) $ logs "Test Log" bind xK_n $ do - (justMod -|- noMod) $ spawn (terminal config ++ " -t Notes -e notes new") + (justMod -|- noMod) $ spawnX (terminal config ++ " -t Notes -e notes new") bind xK_c $ do shiftMod CopyWindow.killAllOtherCopies bind xK_e $ do - (justMod -|- noMod) $ spawn "emoji-select.sh" - (shiftMod -|- rawMask shiftMask) $ spawn "emoticon-select.sh" + (justMod -|- noMod) $ spawnX "emoji-select.sh" + (shiftMod -|- rawMask shiftMask) $ spawnX "emoticon-select.sh" bind xK_a $ - (justMod -|- noMod) $ spawn "set-sink.sh" + (justMod -|- noMod) $ spawnX "set-sink.sh" bind xK_w $ - (justMod -|- noMod) $ spawn "networkmanager_dmenu" + (justMod -|- noMod) $ spawnX "networkmanager_dmenu" bind xK_o $ - (justMod -|- noMod) $ spawn "library-view.sh" + (justMod -|- noMod) $ spawnX "library-view.sh" bind xK_s $ (justMod -|- noMod) toggleSwallowEnabled bind xK_v $ do - (justMod -|- noMod) $ spawn "set-volume.sh" - (shiftMod -|- rawMask shiftMask) $ spawn "set-volume.sh -a" + (justMod -|- noMod) $ spawnX "set-volume.sh" + (shiftMod -|- rawMask shiftMask) $ spawnX "set-volume.sh -a" -- Double-tap Z to toggle zoom. bind xK_z $ do @@ -347,18 +359,18 @@ keymap = runKeys $ do shiftMod $ sendMessage ToggleZoom bind xF86XK_Calculator $ do - noMod $ spawn $ terminal config ++ " -t Floating\\ Term -e /usr/bin/env python3" + noMod $ spawnX $ terminal config ++ " -t Floating\\ Term -e /usr/bin/env python3" bind xF86XK_AudioLowerVolume $ do - noMod $ spawn "pactl set-sink-volume @DEFAULT_SINK@ -1%" + noMod $ spawnX "pactl set-sink-volume @DEFAULT_SINK@ -1%" justMod mediaPrev bind xF86XK_AudioRaiseVolume $ do - noMod $ spawn "pactl set-sink-volume @DEFAULT_SINK@ +1%" + noMod $ spawnX "pactl set-sink-volume @DEFAULT_SINK@ +1%" justMod mediaNext bind xF86XK_AudioMute $ do - noMod $ spawn "pactl set-sink-mute @DEFAULT_SINK@ toggle" + noMod $ spawnX "pactl set-sink-mute @DEFAULT_SINK@ toggle" bind xF86XK_AudioPlay $ do noMod playPause @@ -373,13 +385,13 @@ keymap = runKeys $ do noMod mediaPrev bind xF86XK_MonBrightnessUp $ do - noMod $ spawn "set-backlight.sh +0.05" - justMod $ spawn "set-backlight.sh 1" + noMod $ spawnX "set-backlight.sh +0.05" + justMod $ spawnX "set-backlight.sh 1" bind xF86XK_MonBrightnessDown $ do - noMod $ spawn "set-backlight.sh -0.05" - justMod $ spawn "set-backlight.sh 0.01" - rawMask shiftMask $ spawn "set-backlight.sh 0" + noMod $ spawnX "set-backlight.sh -0.05" + justMod $ spawnX "set-backlight.sh 0.01" + rawMask shiftMask $ spawnX "set-backlight.sh 0" mouseMap :: ButtonsMap l mouseMap = runButtons $ do @@ -412,31 +424,31 @@ mouseMap = runButtons $ do justMod $ \w -> focus w >> mouseResizeWindow w >> windows W.shiftMaster bind button6 $ - justMod $ const (relativeWorkspaceShift prev) + justMod $ noWindow (relativeWorkspaceShift prev) bind button7 $ - justMod $ const (relativeWorkspaceShift next) + justMod $ noWindow (relativeWorkspaceShift next) bind button8 $ - justMod $ const mediaPrev + justMod $ noWindow mediaPrev bind button9 $ - justMod $ const mediaNext + justMod $ noWindow mediaNext bind button14 $ do noMod $ subMouse $ do bind button3 $ - noMod $ const (gotoWorkspace 's') + noMod $ noWindow (gotoWorkspace 's') bind button13 $ do - noMod $ \_ -> click >> CopyWindow.kill1 + noMod $ noWindow $ click >> CopyWindow.kill1 bind button14 $ do - noMod $ \_ -> click >> sendMessage ToggleZoom + noMod $ noWindow $ click >> sendMessage ToggleZoom bind button15 $ do - noMod $ \_ -> spawn "pavucontrol" + noMod $ noWindow $ spawnX "pavucontrol" let mediaButtons = [ (button4, increaseVolume), @@ -462,7 +474,7 @@ mouseMap = runButtons $ do noMod $ subMouse $ do bind button15 $ do - noMod $ const jumpToLast + noMod $ noWindow jumpToLast let workspaceButtons = [ @@ -493,7 +505,7 @@ windowSpecificBindings config = do w <- lift ask - let configureIf b k = tell =<< lift (b --> return (runKeys k config)) + let configureIf b k = tell =<< lift (b --> return (resolveSubmaps (runKeys k) config)) emitKey = flip sendKey w configureIf (flip elem browsers <$> className) $ do |