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

vir*_*tor 7 linux keyboard keyboard-layout

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

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

Nie*_*jou 11

对于每个键码定义,您最多可以有八个键盘.它们成对组织成四组.有键符的家庭ISO_Next_Group,ISO_Prev_Group,ISO_First_Group,和ISO_Last_Group在按下时,通过循环撞击键符组中的关键输出键符.这些键是您获得多个布局的方式.

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

keycode 53 = x X   Greek_xi Greek_XI   multiply U2297   U24E7 U24CD

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


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

    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,也就是说Mode_switch.在组内,发出的符号以递增的级别定义.第一级是裸键. Shift在当前级别添加一个. ISO_Level3_Shift将等级设为III.

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

space⟨⟨U+
Shift+space0020SPACE⟨⟨U+ 0020
R. Alt+spaceSPACE⟨␣⟩U + 2423 OPEN
R. Alt+Shift+spaceBOX⟨⟩U + 2003 EM
R. Ctl+spaceSPACE⟨⎕⟩U + 2395 APL功能符号
R. Ctl+Shift+spaceQU⟨▒⟩U+ 2592
R. Alt+R. Ctl.+spaceMEDIUMSHADE⟨␠⟩U+ 2420符号空间
R. Alt+R. Ctl.+Shift+space⟨⟨U+ 200A头发空间

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

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


¹事实证明xmodmap(1)是错误的并且已弃用.