【问题标题】:xmonad - switching workspaces with mouse buttons 6 and 7xmonad - 使用鼠标按钮 6 和 7 切换工作区
【发布时间】:2014-11-20 23:06:51
【问题描述】:

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

【问题讨论】:

  • IIRC,核心X11协议只有五个按钮。其他按钮可以使用 X 扩展来检测(可能是 XINPUT?我忘了),但我不知道 xmonad 是否也利用了这些扩展。

标签: haskell xmonad


【解决方案1】:

“不起作用”我想你的意思是它不能编译。

@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?您也可以在鼠标绑定中使用它们。 nextWSprevWSX() 类型,所以你需要像上面一样用它们创建常量函数。

【讨论】:

  • 这确实是一个编译错误,基于没有窗口参数。您的建议非常有效。我选择了:((0, 6), \w -> moveTo Prev (WSIs notSP)),并定义了适当的暂存器过滤器。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多