如何使用 xkb [和|或] xmodmap 使 Control-j 在未设置 Control 位的情况下充当 Return(!)

如何使用 xkb [和|或] xmodmap 使 Control-j 在未设置 Control 位的情况下充当 Return(!)

对于我来说,在 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) ]
};

使用此操作,您可以清除现有的修饰符或添加新的修饰符。

相关内容