You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在xmonad.hs按键映射中连续执行两个函数?

解决XMonad中连续执行窗口操作的按键映射问题

你的问题出在对withFocused和XMonad动作组合的理解上。虽然用>>可以顺序执行两个X ()动作,但更可靠且高效的方式是将两个窗口操作合并到同一个withFocused调用中,确保对同一个聚焦窗口执行连续操作。

修改后的代码如下:

`additionalKeysP`
 [ ("M-S-z", spawn "xscreensaver-command -lock")
 , ("M-C-s", unGrab *> spawn "scrot -s")
 ...
 , ("M-<Up>", withFocused $ \w -> keysMoveWindowTo (0,10) (0,0) w >> keysResizeWindow (5,5) (0,0) w)
 ]

原理说明

  • withFocused接收一个Window -> X ()类型的函数,它会自动获取当前聚焦的窗口,并把窗口对象传递给这个函数。
  • 我们在函数内部用>>将移动窗口和调整窗口大小的操作绑定,让它们依次对同一个窗口w执行,避免了两次调用withFocused可能带来的潜在问题(比如极端情况下焦点在两次操作间切换)。

如果你的keysMoveWindowTo和keysResizeWindow是自定义函数,确保它们的签名是(Int, Int) -> (Int, Int) -> Window -> X (),这样上面的写法就能正常工作。如果原来的写法中只有移动生效,也可以检查下keysResizeWindow的参数是否合理(比如调整的尺寸是否太小导致视觉上不明显)。

内容的提问来源于stack exchange,提问作者koijigen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 09:20:19