2009-10-13 48 views
7

我正在寻找一种方法在键盘上添加一个“布局”。我已经在使用使用altgr作为本地字母的布局。我想添加的是一个镜像的右侧键盘,使用大写锁定键(http://xkcd.com/mirrorboard.xkb中描述的一个)用更多修饰符重新映射键盘

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

+0

这个问题基本上是以一种非常不寻常的方式编译键盘映射,需要低级别的黑客。我想过把它放在超级用户身上,但它不会在那里得到任何答案。它更接近于编程(是的 - 这基本上是编程xkb),而不仅仅是调整你的设置(这是超级用户专门研究的)。 – viraptor 2009-10-13 15:09:30

回答

11

对于每个键码定义,最多可以有8个键码。这些组织成对分为四组。有一组键,ISO_Prev_Group,ISO_First_GroupISO_Last_Group,当按下时,通过敲击keysym组中的键来循环键盘输出。这些键是你如何获得多种布局。

举个例子,假设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 ] 
    }; 

方括号中单组。通常情况下,第一组是激活的。该组可以暂时递增1,其中ISO_Group_Shift,又名Mode_switch。在一个组内,所发射的符号被定义为不断增加的等级。级别I是一个纯粹的按键。 Shift为当前级别增加了一个。 ISO_Level3_Shift将等级设定为III。

上面的示例映射七个符号空格键加上各种移键,使得:

空间⟨⟩U + 0020 SPACE
移+空间⟨⟩U + 0020 SPACE
R. Alt +空格键⟨␣⟩U + 2423开盒
R.键Alt + Shift +空格⟨⟩U + 2003 EM SPACE
R. CTL +空间⟨⎕⟩U + 2395 APL功能符号QUAD
R. CTL + Shift +空格⟨▒⟩U + 2592中等色调
R. Alt + R键。 Ctl。+ space⟨␠⟩U + 2420 SYMBOL FOR SPACE
R. Alt + R。 CTL。+ Shift +空格⟨⟩U + 200A HAIR SPACE

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

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


¹原来, xmodmap(1)是越野车并且已弃用。

+0

只是想知道 - 有没有办法让一些关键修改器的方式?这样它就可以在印刷机上执行ISO_Next_Group,在发布时执行ISO_Prev_Group? – viraptor 2009-10-14 23:48:35