xkb - 重新映射的修饰符仍然可以作为修饰符使用

lyd*_*ell 5 keyboard-layout xkb

我正在使用 xkb 创建我自己的键盘布局。不过,我有一个小问题。

key <AE04> {[ Shift_L ]};
key <AE07> {[ Shift_R ]};
key <LFSH> {[ comma  , semicolon , bar    ]};
key <RTSH> {[ period , colon     , period ]};
modifier_map Shift { <AE04>, <AE07> };
Run Code Online (Sandbox Code Playgroud)

以上将shift键移动到其他键。为了使新的 shift 键在按下时实际执行某些操作,我必须添加该modifier_map行。该代码还在旧的 shift 键上放置了常规字符。到现在为止还挺好。

问题是,如果我按住旧的左移键并按下某个字符 - 比如说“a” - 我会得到“,A”。因此该键既可以用作逗号键,也可以用作 shift 键。后者是不希望的。同样的事情发生在正确的旧 shift 键上。事实上,它也发生在 control 和 alt 中。

我该如何解决这个问题?感觉就像我需要modifier_unmap什么。

lyd*_*ell 2

运行后setxkbmap -print我意识到它pc已包含在符号列表中。该符号文件设置了常规修饰符,这是我不想要的。

之前,我已将自己的布局添加到/usr/share/X11/xkb/symbols目录和文件中/usr/share/X11/xkb/rules/evdev.xml。这使得我的布局出现在 GUI 中以选择键盘布局。

解决方案是从头开始制作键盘布局。包含该文件的一种pcpc然而,我需要很多标准键盘的东西。所以我从头到尾通读了该文件,选出了我需要的东西。

简而言之,从头开始创建布局基本上意味着:

  1. 将 的输出复制setxkbmap -print到文件中。
  2. 该文件只包含其他文件。查看列表以了解可以重复使用的内容。对我来说,这意味着替换pc为我自己的文件名。
  3. 如果需要,创建新文件。
  4. 使用启动您的新布局xkbcomp -I$HOME/additional-include-folder file-from-step-one

我从这个优秀的指南中学到了这一点(更详细):http://hack.org/mc/writings/xkb.html