[英]XMonad focus hook
我想配置 XMonad,以便在窗口聚焦时评估某个IO ()
函数,以便我可以根据这是哪个窗口来更改环境的某些方面。 我似乎在文档中找不到任何关于此的信息,但我确定它存在,所以大概我正在寻找错误的关键字。
最接近的可能是logHook :: !(X ())
在XConfig
。 您可以获取焦点窗口并运行IO
操作来更新环境,但是此挂钩被描述为“更改窗口集时执行的操作”,因此您的updateEnv
可以在同一窗口中连续多次调用ID(例如,当您在不改变焦点的情况下交换窗口时)。
myLogHook = gets (peek . windowset) >>= liftIO . updateEnv
where
updateEnv :: Maybe Window -> IO ()
updateEnv = undefined
您可能想要自定义handleEventHook
。
像这样的事情:
myEventHook e@(CrossingEvent {ev_event_type=t, ev_window=win})
| t == enterNotify = do
something with win
return $ All True
| t == leaveNotify = do
something else
return $ All True
| otherwise = return $ All True
多亏了以前的选择,我建立了自己的。 @Leiza,我找到了如何使用clientMask
:
import XMonad
-- import Data.Monoid (All(..))
import Control.Monad (when)
...
hook :: Event -> X All
hook (AnyEvent {ev_event_type = et}) = do
when (et == focusOut) $
<action>
return (All True)
hook _ = return (All True)
...
main = do
...
clientMask = focusChangeMask .|. clientMask def
...
@Leiza 是对的,对我来说CrossingEvents无法正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.