[xmonad] Ratpoison key emulation
spencerjanssen at gmail.com
Fri Sep 19 16:40:25 EDT 2008
On Fri, Sep 19, 2008 at 02:33:00PM -0400, Gwern Branwen wrote:
> Ah, I see. I was searching for the wrong type signature after all.
> So I've been working up a basic XPaste module, and here's what I have thus far"
> sendSelection :: KeyMask -> X ()
> sendSelection m = getSelection >>= (sendString m)
> sendString :: KeyMask -> String -> X ()
> sendString mo = mapM_ (sendChar mo)
> sendChar :: KeyMask -> Char -> X ()
> sendChar modm c = sendKeyScreen modm (stringToKeysym [c])
> sendKeyScreen :: KeyMask -> KeySym -> X ()
> sendKeyScreen modmk key = withFocused (sendKeysym modmk key)
> sendKeysym :: KeyMask -> KeySym -> Window -> X ()
> sendKeysym mods key w = withDisplay $ \d -> do
> rootw <- asks theRoot
> keycode <- io $ keysymToKeycode d key
> io $ allocaXEvent $ \ev -> do
> setEventType ev keyPress
> setKeyEvent ev w rootw none mods keycode True
> sendEvent d w True keyPressMask ev
> setEventType ev keyRelease
> sendEvent d w True keyReleaseMask ev
If I might suggest a few name changes:
- change sendKeyScreen to sendKey
- change sendKeysym to sendKeyWindow
> My first question is, is there any way to scrap all the KeyMask plumbing? I looked at the X11 docs, but there doesn't seem to be any null modmask - mod1Mask is Alt, Shift is Shift, and so on.
KeyMask is a bitmask, so 0 is the no modifiers pressed state. I'd also leave
the KeyMask argument on sendKeysym and sendKeyscreen -- some users want to send
keys with modifiers (eg. the person that started this thread).
> My second question is, why does 'keysymToKeycode' take a String? I manually played around with it in GHCi and it seems every String which isn't a Char always gets evaluated to '0'.
I assume you mean stringToKeysym. Try: stringToKeysym "F1". You should
probably filter out the 0 results when sending a string, or perhaps throw an
More information about the xmonad