如何通过将 [Shift] + [Space] 重新映射到 Super/Hyper 来使用空格键作为修饰键?

如何通过将 [Shift] + [Space] 重新映射到 Super/Hyper 来使用空格键作为修饰键?

我目前正在尝试创建一些具有不同功能的自定义键盘快捷键映射。

为此,我希望空格键充当修饰符/功能键(如CtrlShiftAlt等),因为它覆盖了很大的区域,并为我提供了很多选项来轻松地实现许多组合键。

我的想法是 make Shift+Space执行 Super 修饰符(可能是Super LSuper R),然后用 Super 构建所有自定义快捷方式。 (空格键只是充当超级键位置的一种物理扩展,同时保留常规位置。)

我已经尝试过编辑/usr/share/X11/xkb/symbols/pc,其中默认的空格键功能只是:

key <SPCE> {        [       space           ]       };

这很棒,因为我可以简单地添加一个逗号和另一个参数来获取第二级功能,如下所示:

key <SPCE> {        [      space, Super_L   ]       };

然而,空格键完全停止工作。

更新:我已经能够使空格键正常工作并Hyper L在第二级执行,但是用它创建多个快捷方式存在问题,因为某些软件只会将其视为Shift+Hyper L而不会正确注册超级修改器。

是否可以让空格键正常工作并充当第二级的修饰键?

答案1

因此,我发现的最接近的东西是一套相当复杂的体操,其中包含 xmodmap 和 xcape,详细信息请参见xcape 自述文件的示例部分

这是摘录:

# Map an unused modifier's keysym to the spacebar's keycode and make it a
# control modifier. It needs to be an existing key so that emacs won't
# spazz out when you press it. Hyper_L is a good candidate.
spare_modifier="Hyper_L"
xmodmap -e "keycode 65 = $spare_modifier"
xmodmap -e "remove mod4 = $spare_modifier" # hyper_l is mod4 by default
xmodmap -e "add Control = $spare_modifier"

# Map space to an unused keycode (to keep it around for xcape to
# use).
xmodmap -e "keycode any = space"

# Finally use xcape to cause the space bar to generate a space when tapped.
xcape -e "$spare_modifier=space"

我尝试了这个,当使用修饰符样式时,我能够获得像 Super_L 修饰符一样的空间,但我发现时间干扰了正常输入常规空格,所以第二天我禁用了它。可能有某种方法可以调整时间并使其发挥作用,但我还没有深入研究其中的细节。

相关内容