使用更多修饰符重新键入键盘

时间:2009-10-13 00:41:02

标签: linux keyboard keyboard-layout

我正在寻找一种方法来为键盘添加一个“布局”。我已经在使用一个使用altgr作为本地字母的布局。我想要添加的是一个镜像右手侧键盘,通过大写锁定激活(http://xkcd.com/mirrorboard.xkb中描述的一个)

不幸的是ISO_LEVEL3_SHIFT已经被当地字母表所采用。 (AFAIK)如果我使用mode_shift来更改组,我不能再在组中使用2个以上的级别。有没有办法为altgr和mode_shift创建不同的组?

1 个答案:

答案 0 :(得分:11)

对于每个键码定义,您最多可以有八个键码。它们成对组织成四组。有一系列密钥ISO_Next_GroupISO_Prev_GroupISO_First_GroupISO_Last_Group,按下后,通过敲击密钥组中的密钥来循环密钥输出。这些键是您获得多种布局的方式。

例如,假设ISO_Next_Group已绑定到键码并分配给修饰符,则为此定义:

keycode 53 = x X   Greek_xi Greek_XI   multiply U2297   U24E7 U24CD

在键入“x”的类型上按下带有标签“X”的键盘键。按下ISO_Next_Group键后,我得到“ξ”。再次按它,​​我得到“×”。再按一次,“ⓧ”。最后,第四次按下它会让事情恢复正常。


花了好几天(因为Xkb¹有可怕的文档;最后找到了一个好的指南here),你可以用这样的条目创建一个符号定义文件:

    key <SPCE> {
// Level  I      II       III    IV
        [ space, space,   U2395, U2592 ],    // Group 1
        [ U2423, emspace, U2420, hairspace ] // Group 2
    };

    key <RALT> {
        [ Mode_switch, Mode_switch ]
    };

    key <RCTL> {
        [ ISO_Level3_Shift, ISO_Level3_Shift ]
    };

括号括起一个组。通常,第一组是活动的。可以使用 ISO_Group_Shift ,a.k.a。 Mode_switch 临时增加该组。在组内,发出的符号以递增的级别定义。第一级是裸键。 Shift 将一个添加到当前级别。 ISO_Level3_Shift 将级别设置为III。

上面的示例将七个符号映射到空格键以及各种shift键,以便:

space ⟨⟨U+ 0020 SPACE
Shift + space ⟨⟨U+ 0020 SPACE
R上。 Alt + space ⟨␣⟩U + 2423 OPEN BOX
R上。 Alt + Shift + space ⟨⟨U+ 2003 EM SPACE
R上。 Ctl + space ⟨⎕⟩U+ 2395 APL功能符号四 R上。 Ctl + Shift + space ⟨▒⟩U+ 2592 MEDIUM SHADE
R上。 ALT + R。 Ctl。+ space ⟨␠⟩U + 2420 SYMBOL FOR SPACE
R上。 ALT + R。 Ctl。+ Shift + space ⟨⟨U+ 200A HAIR SPACE

对于V级,还有一个键 ISO_Level5_Shift 。因此,一组可以至少有六个符号。使用模式切换键,这意味着您可以配置键盘输入大约1,200个不同的符号,但在此时按住这么多修饰符可能会减少几个键。

P.S。所有命名符号的名称都存储在/usr/include/X11/keysymdef.h

<小时/> ¹事实证明 xmodmap (1)是错误的并且已弃用。