3

我正在研究高棉键盘布局,但在项目的最后一步遇到了问题。

高棉语有 33 个辅音字符、24 个元音变音字符和另外 14 个独立元音字符。最重要的是,我在 ALT 和 SHIFT-ALT 级别的布局中包含了每个字符对应的国际音标符号,所以很快我就用完了空间。

为了缓解这种情况,我计划将 24 个元音变音符号映射到 F1 - F12 和 SHIFT F1 - F12(在 ALT 和 SHIFT/ALT 级别具有相应的 IPA 字符)但是 SHIFT + FN、ALT + FN 和 SHIFT/ALT + FN 组合不注册。我已经在不同的文本编辑器、浏览器和终端中尝试了这些组合,但都没有奏效。这似乎是一个系统范围的问题。

我正在运行 Ubuntu 10.04。

这是我的布局中与 FN 键有关的部分:

key <FK01> { [ 0x10017b6,       0x10017c2,      voidsymbol, voidsymbol  ] };
key <FK02> { [ 0x10017b7,       0x10017c3,      voidsymbol, voidsymbol  ] };
key <FK03> { [ 0x10017b8,       0x10017c4,      voidsymbol, voidsymbol  ] };
key <FK04> { [ 0x10017b9,       0x10017c5,      voidsymbol, voidsymbol  ] };
key <FK05> { [ 0x10017ba,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK06> { [ 0x10017bb,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK07> { [ 0x10017bc,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK08> { [ 0x10017bd,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK09> { [ 0x10017be,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK10> { [ 0x10017bf,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK11> { [ 0x10017c0,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK12> { [ 0x10017c1,       voidsymbol,     voidsymbol, voidsymbol  ] };

如您所见,到目前为止,我只填写了 SHIFT F1 - F4,当这些键正常工作时,我将完成其余的工作。

希望你们中的一些人能指出我正确的方向。

4

2 回答 2

2

我不知道为什么这些组合没有注册,但作为一种替代解决方案,可以考虑使用每个键的更多级别,例如使用level5(通过包含一个符号定义来将某个键映射到level5修饰符)并定义键使用八级类型进行映射,例如EIGHT_LEVELor EIGHT_LEVEL_ALPHABETIC

于 2016-01-07T02:18:44.263 回答
1

我的猜测是您的 FN 键的默认后备“类型”没有包含足够的键。例如,如果你有

key <FK01> { type = "TWO_LEVEL", [FirstKey,SecondKey,ThirdKey,...]}

那么只能生成FirstKey和SecondKey。如果你有

key <FK01> { type = "CTRL+ALT", [FirstKey,SecondKey,ThirdKey,...]}

然后应该识别 alt 和 ctrl 和 ctrl+alt 级别,为您提供 5 个级别,其中 4 个您可能想要更改(您可能不想更改 ctrl 级别)。请记住,您可能希望能够在紧急情况下使用 CTRL+ALT+FN 从 X 切换到终端,或者至少在布局中的某处将一些键绑定到 XF86Switch_VT_1。

您可能还想区分 Alt 和 AltGr,后者在 xkb 中命名为 ISO_Level3_Shift。

如果您想在键盘上的某个位置创建和使用 ISO_Level5_Switch 按钮,您可以使用类型“EIGHT_LEVEL”或类似类型来识别(无修饰符)、level3 和 level5 的所有组合,总共 8 个级别。

(我将 Alt_L 绑定到我的左 Alt 按钮,将 ISO_Level3_Shift 绑定到我的右 Alt 按钮,并将 ISO_Level5_Shift 绑定到我的右“windows”按钮)

您的键盘映射可能需要从其他地方导入一些键类型。在 .xkb 文件的 xkb_types 部分中,添加以下行

augment "level5" 

将“LEVEL_EIGHT”和其他类似类型包含到您的布局中。

中的文件/usr/share/X11/xkb/types/应该向您显示系统上可用的类型,以及您需要将哪个文件添加到您的 .xkb 文件中,并带有扩充行以使用该类型。(它们可能在您系统上的不同目录中,因为我使用的是 Gentoo;locate level5在终端中键入以查找适合您的目录。)如果您觉得需要,您也可以直接在 xkb_types 部分中构建自己的类型您的 .xkb 文件,在扩充行之后。查看文件/usr/share/X11/xkb/types/以查看类型定义的语法。

您还需要将该行添加到您的 xkb_compatibility 部分,而不仅仅是 xkb_types 部分;xkb_types 提供类型,xkb_compatibility 定义修饰键行为,因此虽然augment "level5"xkb_types 中的 an 可以让您访问“EIGHT_LEVEL”之类的类型,但 xkb_compatibility 中的 an augment "level5"in xkb_compatibility 将使绑定到 ISO_Level5_Shift 的键实际上充当修饰符。

只是给你一个想法,我自己的 xkb_compatibility 部分如下所示:

 xkb_compatibility "complete" {

     // "pc" would only set Alt, need "pc98" for NumLock
     include  "pc98" // Numlock
     augment "misc" // Alt,Meta,Super,Hyper ... 
     augment "ledscroll(group_lock)" // Set scroll lock on group switch
     augment "xfree86" // Switch out to terminal
     augment "caps" // Simple caps thing
     augment "iso9995" // level3,groups
     augment "level5" // level5
 };

我不确定所有 .xkb 文件是否都包含这些部分,或者它是否只是我的。IIRC,当您设置布局而不是布局文件本身时,通常有一些 GUI 方式包括 level3、level5 等,如果这更符合您的喜好。

如果你想更深入,我可以推荐类似https://www.charvolant.org/doug/xkb/

于 2017-06-01T08:00:14.023 回答