您可以在 xmonad 中分配任意键绑定吗?

您可以在 xmonad 中分配任意键绑定吗?

我知道如何设置键绑定,您必须按住 KeyMask 类型的键之一。它们是:Alt、Ctrl、Windows 键。此外,将 0 作为 KeyMask 可用于定义单键命令。

但我无法将任意键指定为 KeyMask。大多数键都是 KeySym 类型,并且显式转换不起作用。

如何分配任意组合键?或者这只有在黑客攻击过多的情况下才有可能实现吗?

例如F1+F2

答案1

您不能直接执行此操作,因为修饰键与其他键不同。所有 KeyPress 或 KeyRelease 事件都包含一个指示修饰键状态的字段,因此当您收到“A按键按下”事件时,您知道它是否只是ACtrl+ A。但对于其他键,您必须自己跟踪它们是否在第二个键之前被按下。

该模块XMonad.Actions.Submap提供一个submap添加到按键绑定的操作,该操作将抓取键盘并等待下一个按键事件,然后从地图返回匹配的操作。因此F1F2您可以添加到键绑定列表中:

myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
    [

     ((0, xK_F1),  submap . M.fromList $
                         [ 
                          ((0, xK_F2),  someAction)
                         ])
    ]

相关内容