我正在寻找一种方法来为我的键盘添加一个“布局”。我已经在使用将 altgr 用于本地字母的布局。我想添加的是用大写锁定激活的镜像右侧键盘(在 http://xkcd.com/mirrorboard.xkb 中描述)
不幸的是,ISO_LEVEL3_SHIFT
已被本地字母表占用。 (AFAIK) 如果我使用 mode_shift
更改组,我不能再在一个组中使用超过 2 个级别。有没有办法为 altgr 和 mode_shift
创建不同的组?
最佳答案
对于每个键码定义,您最多可以有八个键符。这些被成对地分为四组。有一系列键符 ISO_Next_Group
、ISO_Prev_Group
、ISO_First_Group
和 ISO_Last_Group
,按下时会循环键符通过在 keysym 组中敲击键来输出。这些键是您获得多种布局的方式。
例如,假设 ISO_Next_Group
已绑定(bind)到键码并分配给修饰符,那么对于此定义:
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,即 Mode_switch,临时将组递增 1。在一个组中,发出的符号以递增的级别定义。第一级是一个裸按键。 Shift 将当前级别加一。 ISO_Level3_Shift 将级别设置为 III。
上面的示例将七个符号映射到空格键和各种 shift 键,例如:
空间 ⟨ ⟩ U+0020 空间
Shift+空格 ⟨ ⟩ U+0020 空格
R。 Alt+空格 ⟨␣⟩ U+2423 开箱
R。 Alt+Shift+空格 ⟨⟩ U+2003 EM 空格
R。 Ctl+空格 ⟨⎕⟩ U+2395 APL FUNCTIONAL SYMBOL QUAD
R。 Ctl+Shift+空格 ⟨▒⟩ U+2592 中色
R。 Alt+R。 Ctl.+space ⟨␠⟩ U+2420 SYMBOL FOR SPACE
R。 Alt+R。 Ctl.+Shift+空格 ⟨⟩ U+200A 头发空间
V 级还有一个键 ISO_Level5_Shift。因此一组至少可以有六个符号。使用模式切换键,这意味着您可以将键盘配置为键入大约 1,200 个不同的符号,但此时按住如此多的修饰符可能会使一些键变弱。
附言所有命名符号的名称都存储在 /usr/include/X11/keysymdef.h
中。
¹ 事实证明,xmodmap(1) 有问题并且已弃用。
关于linux - 使用更多修饰符重新映射键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1557689/