对于我来说,在 xterm 和 vim 中使用 Control-j 代替 Return 似乎非常方便,并且我想对所有 X 应用程序使用此序列。
可以使用 xkb 轻松完成,通过将 ISO_Level5_Shift 重新映射到 Control 键,并将 Return 设置为 j 键的第 5 级符号,但此后 vim 和 xterm 中的所有其他 Control 组合都会停止工作(因为 xterm 和 vim 无法理解 Mod 键),这是绝对是不可接受的。
我已成功做到这一点,而无需重新映射 ISO_Level5_Shift,方法是使用 xkb_symbols 部分中的“LOCAL_EIGHT_LEVEL”键类型,它使用 Control(而不是 ISO_Level5_Shift)作为 Level5 修饰符:
key <AC07> { [ j, J, plusminus, NoSymbol, Return ], type[Group1]= "LOCAL_EIGHT_LEVEL" };
此解决方案的问题在于 - xkb 设置 Control 位,而 Control-j 返回 Control-Return 而不仅仅是 Return。有时(顺便说一下,相当频繁)此组合不能用作 Return。
因此,我需要修改其中一个解决方案以取消设置 Control-j 组合的控制位。
根据此链接:有关 XKB 的 Arch Wiki 文章可以,但我不知道怎么做。所以,这就是我的问题。
也许我必须为 Return+Control 添加一些 xkb_compatibility 规则,或者类似的东西,或者添加一些 xmodmap 映射 - 任何解决方案都将不胜感激。
答案1
我找到了我的问题的解决方案。您可以在 xkb_symbols 部分中为每个键分配一个操作。重定向是我们需要的操作:
key <AC07> { [ j, J, plusminus, NoSymbol, NoSymbol ],
type[Group1]="EIGHT_LEVEL_SEMIALPHABETIC",
actions = [ NoAction(), NoAction(), NoAction(), NoAction(),
Redirect(key=<RTRN>, clearmods=all) ]
};
使用此操作,您可以清除现有的修饰符或添加新的修饰符。