如何使用 xkb [and|or] xmodmap 使 Control-j 在没有设置控制位(!)的情况下作为 Return 工作

Vas*_*ily 5 keyboard-shortcuts keyboard-layout xmodmap xkb

在 xterm 和 vim 中使用 Control-j 而不是 Return 对我来说看起来非常方便,我想对所有 X 应用程序使用这个序列。

通过将 ISO_Level5_Shift 重新映射到 Control 键,并将 Return 设置为 j 键的第 5 级符号,可以使用 xkb 轻松完成,但在此之后,vim 和 xterm 中的所有其他 Control 组合停止工作(因为 xterm 和 vim 无法理解Mod键),这是绝对不能接受的。

我通过在 xkb_symbols 部分使用“LOCAL_EIGHT_LEVEL”键类型,在不重新映射 ISO_Level5_Shift 的情况下做到了这一点,它使用 Control(而不是 ISO_Level5_Shift)作为 Level5 修饰符:

    key <AC07> { [ j, J, plusminus, NoSymbol, Return ], type[Group1]= "LOCAL_EIGHT_LEVEL" };
Run Code Online (Sandbox Code Playgroud)

这个解决方案的问题——xkb 设置了 Control 位,Control-j 返回 Control-Return 而不仅仅是 Return。有时(很多时候,顺便说一句)这种组合不能作为返回。

所以,我需要的是修改这些解决方案之一,以取消 Control-j 组合的控制位。

根据这个链接:Arch Wiki article about XKB可以做到,但我不知道如何做到这一点。所以,这就是我的问题。

也许我必须为 Return+Control 或类似的东西添加一些 xkb_compatibility 规则,或者添加一些 xmodmap 映射 - 任何解决方案将不胜感激。

Vas*_*ily 6

我已经为我的问题找到了解决方案。您可以为 xkb_symbols 部分中的每个键分配一个操作。重定向是我们需要的一个动作:

key <AC07> { [ j,    J,     plusminus,      NoSymbol,      NoSymbol ],
  type[Group1]="EIGHT_LEVEL_SEMIALPHABETIC",
  actions = [ NoAction(), NoAction(), NoAction(), NoAction(), 
                                Redirect(key=<RTRN>, clearmods=all) ]
};
Run Code Online (Sandbox Code Playgroud)

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