diff options
| author | Josh Rahm <rahm@google.com> | 2022-03-25 15:55:54 -0600 |
|---|---|---|
| committer | Josh Rahm <rahm@google.com> | 2022-03-25 15:55:54 -0600 |
| commit | a7129b68fb7fa4f7cea52513fad7223dcbba9801 (patch) | |
| tree | 35626d34fed9f5e7d48ad1f2965c6451880a8647 /src/Internal | |
| parent | e5f6b5109aab58b5d066ada7c542d0ecb991cafb (diff) | |
| download | rde-a7129b68fb7fa4f7cea52513fad7223dcbba9801.tar.gz rde-a7129b68fb7fa4f7cea52513fad7223dcbba9801.tar.bz2 rde-a7129b68fb7fa4f7cea52513fad7223dcbba9801.zip | |
Another Chrome binding added.
There's a bug where it seems the mappings are applied inconsistently
after a restart. Not sure what causes that. Seems bouncing XMonad again
fixes it.
Diffstat (limited to 'src/Internal')
| -rw-r--r-- | src/Internal/Intercept.hs | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/src/Internal/Intercept.hs b/src/Internal/Intercept.hs index 987733b..c99ce09 100644 --- a/src/Internal/Intercept.hs +++ b/src/Internal/Intercept.hs @@ -1,3 +1,7 @@ + +-- Module for intercepting key presses not explicity mapped in the key bindings. +-- This uses some deep magic with grabKey and windows and everything else, but +-- it makes window-specific key bindings awesome! module Internal.Intercept where import XMonad @@ -111,19 +115,10 @@ getKeyCodesForKeysym dpy keysym = do doGrab :: Display -> Window -> (KeyMask, KeySym) -> X () doGrab dpy win (keyMask, keysym) = do let grab kc m = io $ grabKey dpy kc m win True grabModeAsync grabModeAsync - (minCode, maxCode) = displayKeycodes dpy - allCodes = [fromIntegral minCode .. fromIntegral maxCode] - -- build a map from keysyms to lists of keysyms (doing what - -- XGetKeyboardMapping would do if the X11 package bound it) - syms <- forM allCodes $ \code -> io (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 + codes <- io $ getKeyCodesForKeysym dpy keysym - forM_ (keysymToKeycodes keysym) $ \kc -> + forM_ codes $ \kc -> mapM_ (grab kc . (keyMask .|.)) =<< extraModifiers disableKey :: (KeyMask, KeySym) -> WindowHook |