繁体   English   中英

XMonad 焦点挂钩

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM