aboutsummaryrefslogtreecommitdiff
path: root/src/Rahm/Desktop/RebindKeys.hs
diff options
context:
space:
mode:
authorJosh Rahm <rahm@google.com>2024-02-02 13:42:38 -0700
committerJosh Rahm <rahm@google.com>2024-02-02 13:42:38 -0700
commit8d077511f2d06a79e2dc638f46877a394c78d66e (patch)
treeeb663f3fdd7b32958d990f871abd9f0cb3f3d166 /src/Rahm/Desktop/RebindKeys.hs
parentcf51fa2e89b92754fda0664e57ba647491eac610 (diff)
downloadrde-8d077511f2d06a79e2dc638f46877a394c78d66e.tar.gz
rde-8d077511f2d06a79e2dc638f46877a394c78d66e.tar.bz2
rde-8d077511f2d06a79e2dc638f46877a394c78d66e.zip
Add support for root-level keycode mappings.
The code is a bit of a mess, and should probably be moved out of Dsl2 and into a dedicated place, but it works. I had to do a bit of a hack to get around XMonad's ungrabbing the keyboard after a Mapping event, which is not the best, but I don't have a better way of doing it.
Diffstat (limited to 'src/Rahm/Desktop/RebindKeys.hs')
-rw-r--r--src/Rahm/Desktop/RebindKeys.hs32
1 files changed, 1 insertions, 31 deletions
diff --git a/src/Rahm/Desktop/RebindKeys.hs b/src/Rahm/Desktop/RebindKeys.hs
index fc75eb9..8712b31 100644
--- a/src/Rahm/Desktop/RebindKeys.hs
+++ b/src/Rahm/Desktop/RebindKeys.hs
@@ -3,8 +3,6 @@
-- it makes window-specific key bindings awesome!
module Rahm.Desktop.RebindKeys
( remapHook,
- getKeyCodesForKeysym,
- doGrab,
disableKey,
remapKey,
sendKeyQ,
@@ -27,7 +25,7 @@ import qualified Data.Map as Map
lookup,
)
import Data.Monoid (All (..))
-import Rahm.Desktop.Keys.Dsl2 (KeySymOrKeyCode (..))
+import Rahm.Desktop.Keys.Dsl2 (KeySymOrKeyCode (..), doGrab, getKeyCodesForKeysym)
import XMonad
( Default (def),
Display,
@@ -94,34 +92,6 @@ remapHook event = do
Nothing -> return (All True)
_ -> return (All True)
-getKeyCodesForKeysym :: Display -> KeySym -> IO [KeyCode]
-getKeyCodesForKeysym dpy keysym = do
- let (minCode, maxCode) = displayKeycodes dpy
- allCodes = [fromIntegral minCode .. fromIntegral maxCode]
-
- syms <- forM allCodes $ \code -> keycodeToKeysym dpy code 0
- let keysymMap' = Map.fromListWith (++) (zip syms [[code] | code <- allCodes])
-
- -- keycodeToKeysym returns noSymbol for all unbound keycodes, and we don't
- -- want to grab those whenever someone accidentally uses def :: KeySym
- let keysymMap = Map.delete noSymbol keysymMap'
- let keysymToKeycodes sym = Map.findWithDefault [] keysym keysymMap
-
- return $ keysymToKeycodes keysym
-
-doGrab :: Display -> Window -> (KeyMask, KeySymOrKeyCode) -> X ()
-doGrab dpy win (keyMask, keySymOrKeyCode) = do
- let grab kc m = io $ grabKey dpy kc m win True grabModeAsync grabModeAsync
-
- codes <-
- case keySymOrKeyCode of
- Ks keysym ->
- io $ getKeyCodesForKeysym dpy keysym
- Kc keycode -> return [keycode]
-
- forM_ codes $ \kc ->
- mapM_ (grab kc . (keyMask .|.)) =<< extraModifiers
-
disableKey :: (KeyMask, KeySym) -> WindowHook
disableKey key = remapKey (fmap Ks key) (return ())