diff options
| author | Josh Rahm <rahm@google.com> | 2024-02-02 13:42:38 -0700 |
|---|---|---|
| committer | Josh Rahm <rahm@google.com> | 2024-02-02 13:42:38 -0700 |
| commit | 8d077511f2d06a79e2dc638f46877a394c78d66e (patch) | |
| tree | eb663f3fdd7b32958d990f871abd9f0cb3f3d166 /src/Rahm/Desktop/RebindKeys.hs | |
| parent | cf51fa2e89b92754fda0664e57ba647491eac610 (diff) | |
| download | rde-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.hs | 32 |
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 ()) |