xmonad - 使用鼠标按钮6和7切换工作区

时间:2014-11-20 09:20:53

标签: haskell xmonad

我希望能够使用鼠标上的按钮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。

1 个答案:

答案 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了?您也可以在鼠标绑定中使用它们。 nextWSprevWS的类型为X(),因此您需要使用它们生成常量函数,如上所述。