【问题标题】:Keyboard remapping with more modifiers使用更多修饰符重新映射键盘
【发布时间】:2010-12-06 04:10:22
【问题描述】:

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

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

【问题讨论】:

  • 这个问题基本上是关于以一种相当不寻常的方式编译键盘映射,需要低级黑客攻击。我想把它放在超级用户身上,但它不会在那里得到任何答案。它更接近于编程(是的 - 这基本上是编程 xkb),而不仅仅是调整你的设置(这是超级用户擅长的)。

标签: linux keyboard keyboard-layout


【解决方案1】:

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

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

keycode 53 = x X Greek_xi Greek_XI 乘 U2297 U24E7 U24CD

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


花了几天时间(因为 Xkb¹ 的文档很糟糕;终于找到了一个不错的指南 here),您可以创建一个符号定义文件,其中包含如下条目:

{ // 级别 I II III IV [ 空间, 空间, U2395, U2592 ], // 第 1 组 [ U2423, emspace, U2420, hairspace ] // 第 2 组 }; 键 { [ 模式开关,模式开关 ] }; 键 { [ ISO_Level3_Shift, ISO_Level3_Shift ] };

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

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

空格 ⟨ ⟩ U+0020 空格
Shift+空格 ⟨ ⟩ U+0020 空格
R. Alt+空格 ⟨␣⟩ U+2423 OPEN BOX
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 空间符号
R. Alt+R。 Ctl.+Shift+空格 ⟨ ⟩ U+200A 头发空间

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

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


¹ 事实证明 xmodmap(1) 存在问题且已弃用。

【讨论】:

  • 只是想知道 - 有没有办法以这种方式使某些键成为修饰符?那么它在新闻发布时执行 ISO_Next_Group 并在发布时执行 ISO_Prev_Group?
猜你喜欢
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
  • 2011-03-23
相关资源
最近更新 更多