7

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

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

4

1 回答 1

11

对于每个键码定义,您最多可以有八个键符。这些被成对地分成四组。有一系列键符ISO_Next_Group, ISO_Prev_Group, ISO_First_Group, ISO_Last_Group,当按下时,通过敲击键符组中的键来循环键符输出。这些键是您获得多种布局的方式。

作为一个例子,假设ISO_Next_Group已经绑定到一个键码并分配给一个修饰符,那么对于这个定义:

键码 53 = x X Greek_xi Greek_XI 乘 U2297 U24E7 U24CD

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


花了几天时间(因为 Xkb¹ 有可怕的文档;终于在这里找到了一个好的指南),您可以创建一个符号定义文件,其中包含如下条目:

    键 <SPCE> {
// 级别 I II III IV
        [ 空间, 空间, U2395, U2592 ], // 第 1 组
        [ U2423, emspace, U2420, hairspace ] // 第 2 组
    };

    键 <RALT> {
        [ 模式开关,模式开关 ]
    };

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

括号包含一个组。通常,第一组是活动的。该组可以使用ISO_Group_Shiftaka临时增加一Mode_switch。在一个组内,发出的符号以递增的级别定义。级别 I 是一个简单的按键。 Shift将当前级别加一。 ISO_Level3_Shift将级别设置为 III。

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

space⟨ ⟩ U+0020 空格
Shift+space⟨ ⟩ U+0020 空格
R. Alt+space⟨␣⟩ U+2423
R. Alt+Shift+space开箱 ⟨ ⟩ U+2003 EM 空格
R. Ctl+space⟨⎕⟩ U+2395 APL 功能符号四边形
R. Ctl+Shift+space⟨▒⟩ U+2592
R. Alt+R. Ctl.+space中色⟨⟨⟨ 2420 空间符号
R. Alt+R. Ctl.+Shift+space⟨ ⟩ U+200A 头发空间

V级也有一个键ISO_Level5_Shift。因此,一组至少可以有六个符号。使用模式切换键,这意味着您可以将键盘配置为输入大约 1,200 个不同的符号,但此时按住如此多的修饰符可能会使一些键失效。

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


¹ 原来xmodmap (1) 有问题且已弃用。

于 2009-10-14T12:55:34.003 回答