我知道如何设置键绑定,您必须按住 KeyMask 类型的键之一。它们是:Alt、Ctrl、Windows 键。此外,将 0 作为 KeyMask 可用于定义单键命令。
但我无法将任意键指定为 KeyMask。大多数键都是 KeySym 类型,并且显式转换不起作用。
如何分配任意组合键?或者这只有在黑客攻击过多的情况下才有可能实现吗?
例如F1+F2
答案1
您不能直接执行此操作,因为修饰键与其他键不同。所有 KeyPress 或 KeyRelease 事件都包含一个指示修饰键状态的字段,因此当您收到“A按键按下”事件时,您知道它是否只是A或Ctrl+ A。但对于其他键,您必须自己跟踪它们是否在第二个键之前被按下。
该模块XMonad.Actions.Submap提供一个submap
添加到按键绑定的操作,该操作将抓取键盘并等待下一个按键事件,然后从地图返回匹配的操作。因此F1,F2您可以添加到键绑定列表中:
myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
[
((0, xK_F1), submap . M.fromList $
[
((0, xK_F2), someAction)
])
]