未逐字使用自定义键盘布局

未逐字使用自定义键盘布局

我创建了一个自定义键盘布局,~/dot/c98.xkb.它看起来像这样:

// vim: ft=xkb
xkb_keymap {
    xkb_keycodes "k" { include "evdev(evdev)" };
    xkb_geometry "g" { include "pc(pc105)" };

    xkb_types "t" {
    };
    xkb_compat "c" {
    };
    xkb_symbols "s" {
    };
};

显然,空块中实际上有东西,但我跳过它以节省空间。

编译和反编译它xkbcomp c98.xkb c98.xkm; xkbcomp c98.xkm c98_xkm.xkb会创建一个与原始文件等效的文件(与任何反编译代码类似)。

然而,执行此操作xkbcomp c98.xkb $DISPLAY; xkbcomp $DISPLAY c98_display.xkb会导致错误消息(尽管它仍然有效;消息复制如下),并且文件与原始文件略有相似:

  • keycodes包括evdev+aliases(qwerty)而不只是evdev.它已更名为evdev+aliases(qwerty).
  • types包含很多东西,但不是我指定的(似乎只是包含complete),并且已重命名为complete/
  • compat包含我告诉它的内容,但还有更多virtual_modifiers。那个也叫complete
  • symbols包含它应该包含的内容,除了该name[group1]字段已更改为English (US),并且某些字段type具有奇怪的值 - 我猜它存储索引而不是名称,并且由于该types字段已损坏...该块的名称已更改为pc+us+inet(evdev)
  • geometry似乎包含了它应该包含的内容,包括块名称。

由于某种原因,似乎xkbcomp只复制了一些块,而忽略了keycodestypes字段。


尝试设置布局时的上述错误消息是:

X Error of failed request:  BadAtom (invalid Atom parameter)
  Major opcode of failed request:  135 (XKEYBOARD)
  Minor opcode of failed request:  18 (XkbSetNames)
  Atom id in failed request:  0x435345
  Serial number of failed request:  70
  Current serial number in output stream:  73

完整的源代码以及c98_xkm.xkb和之间的差异c98_display.xkb可以找到这里

相关内容