我希望能够使用鼠标上的按钮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")
]
不起作用,原因对于知道Haskell和xmonad的人来说是显而易见的。
任何建议的TIA。
答案 0 :(得分:4)
由于"没有工作"我想你的意思是它没有编译。
在@chi评论之后,我检查了按钮:button6 and 7 are not defined,这是第一个问题。但根据this post,如果你只是提供他们的号码,额外的按钮就可以工作。
看起来您正在使用XMonad.Util.EZConfig模块中的additionalMouseBindings
函数。它的类型是:
additionalMouseBindings :: XConfig a -> [((ButtonMask, Button), Window -> X ())] -> XConfig a
你在反引号中将它变成运算符。你没有在这里显示XConfig a
类型的第一个操作数,所以你可能在这里遇到第一个错误。你应该有这样的形式:
yourPreviousConfig `additionalMouseBindings` listOfBindings
该表达式与您的新XConfig相同。
您可以看到鼠标按钮的绑定列表与键的类型不同。列表的元素是((ButtonMask, Button), Window -> X ())
类型:按钮与一个函数相关联,该函数接受Window
并返回X()
(而键与X()
类型的表达式相关联) 。 XMonad将使用单击的窗口作为参数调用此处指定的函数。在你的情况下,你不关心窗口。 spawn "xdotool key super+Down"
属于X ()
类型,您可以通过制作lambda function将其转换为带Window
(或任何内容)的函数:
((0, 6), \w -> spawn "xdotool key super+Down")
或者您可以使用const
获取始终返回spawn "xdotool key super+Down"
的常量函数:
((0, 6), const $ spawn "xdotool key super+Down")
最后,调用xdotool
来切换工作区似乎真的太过分了。也许您已经在密钥绑定中使用some of the functions of the module here了?您也可以在鼠标绑定中使用它们。 nextWS
和prevWS
的类型为X()
,因此您需要使用它们生成常量函数,如上所述。