XMonadはhandleEventHook
に、KeyPressイベントのイベントを含むすべての受信したイベントを、渡すので、このコードはkeyRelease
イベントに反応することができるだろう:
module KeyUp where
import Data.Monoid
import qualified Data.Map as M
import XMonad
import Control.Monad
keyUpEventHook :: Event -> X All
keyUpEventHook e = handle e >> return (All True)
keyUpKeys (XConf{ config = XConfig {XMonad.modMask = modMask} }) = M.fromList $
[ ((modMask, xK_v), io (print "Hi")) ]
handle :: Event -> X()
handle (KeyEvent {ev_event_type = t, ev_state = m, ev_keycode = code})
| t == keyRelease = withDisplay $ \dpy -> do
s <- io $ keycodeToKeysym dpy code 0
mClean <- cleanMask m
ks <- asks keyUpKeys
userCodeDef() $ whenJust (M.lookup (mClean, s) ks) id
handle _ = return()
あなたはあなたのxmonad.hsファイルでそのようにそれを使用します。
handleEventHook = handleEventHook defaultConfig `mappend`
keyUpEventHook `mappend`
fullscreenEventHook
残念ながら、これはまだ動作しません。それが唯一の定期的なkeys
構成で対応するエントリを持ってKeyRelease
イベントに反応します。これは、がXMonad.Main
で、keys
に記載されているキーのみを取得しているためです。 KeyUp
で処理するすべてのコンビネーションに対してダミーアクションを定義することで回避できます。
myKeys [email protected](XConfig {XMonad.modMask = modMask}) = M.fromList $
...
, ((modMask , xK_v ), return())