Xmonad - 如何移动鼠标指针作为 ManageHook 的一部分?

Xmonad - How do I move mouse pointer as part of ManageHook?

给定此示例 myManageHook。如何在 doIgnore 之后调用 UpdatePointer?我所有的尝试都导致类型不兼容。

myManageHook = composeAll . concat $
    [
      -- IntelliJ idea Tweaks
      -- Manage idea completion window
      , [ appName =? "sun-awt-X11-XWindowPeer" <&&> className =? "jetbrains-idea" --> doIgnore ]
      , [ (className ~=? "jetbrains-") <&&> (title ~=? "Changes in") -->  unfloat ]
    ]
    where
      unfloat = ask >>= doF . W.sink

我的问题是,如果我的鼠标指针位于建议保管箱上方,IntelliJ Idea 弹出窗口 window 在键入时会失去焦点。这就是为什么当 window 出现时我试图将鼠标移动到屏幕的上部。

UPD 找到了包含 Idea 解决方法的相关线程 https://youtrack.jetbrains.com/issue/IDEA-112015#comment=27-2362253

您可以使用 liftXX 动作变成 Query 动作。不过,您可能想使用 XMonad.Actions.Warp 而不是 X.A.UpdatePointer;后者看起来可能有点太神奇了,无法在 manage hook 期间明智地开火。无论如何,一旦你看到如何提升 X 动作,你应该能够自己尝试一下。

因此,对于 banish,您可以像这样使用 liftX

... --> (liftX (banish UpperLeft) >> doIgnore)

其他 X 动作可以用 doIgnore 类似地提升和排序。