我希望能够使用鼠标上的按钮6和7(滚轮两侧的摇杆按钮)移动到上一个和下一个工作区.我猜它有一些关系additionalMouseBindings,如果它跟additionalKeys我一样是金色的.唉,它不是,我不完全了解如何定义新的绑定.天真的:
`additionalMouseBindings`
[ -- get the middle button to switch views
((0, button6), spawn "xdotool key super+Down")
, ((0, button7), spawn "xdotool key super+Up")
]
Run Code Online (Sandbox Code Playgroud)
因为对于知道Haskell和xmonad的人来说显而易见的原因是不起作用的.
任何建议的TIA.
我想你所说的“不起作用”是指它无法编译。
在 @chi 评论之后,我检查了按钮:button6 和 7 没有定义,所以这是第一个问题。但根据这篇文章,如果你只给出他们的号码,额外的按钮就可以工作。
看起来您正在使用additionalMouseBindingsXMonad.Util.EZConfig 模块中的函数。它的类型是:
additionalMouseBindings :: XConfig a -> [((ButtonMask, Button), Window -> X ())] -> XConfig a
Run Code Online (Sandbox Code Playgroud)
您将其用反引号括起来,这将其变成了运算符。您没有在此处显示类型为 的第一个操作数XConfig a,因此此处可能会出现第一个错误。你应该有以下形式的东西:
yourPreviousConfig `additionalMouseBindings` listOfBindings
Run Code Online (Sandbox Code Playgroud)
该表达式等于您的新 XConfig。
您可以看到鼠标按钮的绑定列表与按键的绑定类型不同。列表的元素的类型为:按钮与接受 a并返回((ButtonMask, Button), Window -> X ())的函数关联(而键与类型的表达式关联)。XMonad 将使用单击的窗口作为参数来调用您在此处指定的函数。你不关心你的情况下的窗户。 类型为,您可以通过创建lambda 函数将其转换为接受 a (或任何内容)的函数:WindowX()X()spawn "xdotool key super+Down"X ()Window
((0, 6), \w -> spawn "xdotool key super+Down")
Run Code Online (Sandbox Code Playgroud)
或者您可以使用const获取始终返回的常量函数spawn "xdotool key super+Down":
((0, 6), const $ spawn "xdotool key super+Down")
Run Code Online (Sandbox Code Playgroud)
xdotool最后,调用切换工作空间似乎确实有点过分了。也许您已经在您的按键绑定中使用了该模块的一些功能?您也可以在鼠标绑定中使用它们。nextWS和prevWS的类型为X(),因此您需要使用它们创建常量函数,如上所述。