(我已经问过这个问题了超级用户但没有得到答案,所以我现在就在这里尝试。)
我想要光标键和其他一些键,如 AltGr+c、h、t、n 等(如果您有 qwerty,则为 i、j、k、l)。我制作了一个自定义键盘布局文件(请参阅这里)。在那里我基本上只是拿了一个布局文件并将相关行修改为类似
key <AC09> { [ n, N, Right, Right ] };
我有这个 as/usr/share/X11/xkb/symbols/nonpop
并用setxkbmap nonpop
in加载它~/.xinitrc
(我没有使用任何 DE,只是使用 Awesome WM)。
而且它几乎有效。
- 例如,在 Firefox 中,一切都运行良好。例如,AltGr+n 向右移动光标,Shift+AltGr+n 选择文本。 LyX 的主文本区域也是如此。
- 在MonoDevelop中,光标通过AltGr+n移动,但Shift+AltGr+n也只是移动光标而不是选择。 Shift+Right 通常选择文本。
- 在 NetBeans 和 LyX 对话框中,按 (Shift+)AltGr+n 绝对不会执行任何操作。
我猜这些其他程序读取了 AltGr 状态并认为这是坏事。那么,有什么方法可以让事情按照我想要的方式发生吗?看起来覆盖层可能是一个解决方案,但我还没有让它们工作。
答案1
问题是,当您使用诸如 之类的常见修饰符时AltGr,程序实际上会将其视为在您使用 AltGr 箭头时被按下。所以Shift+ AltGr+i实际上对程序来说就像你在按下一样Shift + Alt + Up
,而额外的添加使Alt
程序感到困惑。您可以通过在可能的情况下向程序添加更多快捷方式来避免这种情况,执行Shift + Alt + Up
与 相同的操作Shift + Up
,或者您可以使用程序不知道的不常见修饰符。
还有其他方法可以做到这一点,但这是一种更简单的方法,并且对我来说效果很好。它会在字母数字键上创建一个“Group2”覆盖层,这样当您切换到 Group2 时,您将看到箭头而不是字母。您可以通过切换(像Caps Lock正常工作一样打开/关闭)或瞬时(按按激活,像Shift正常工作一样)切换到 Group2
partial alphanumeric_keys
xkb_symbols "alpha_arrows" {
key <AD07> {
symbols[Group2]= [ Home ] # u
};
key <AD08> {
symbols[Group2]= [ Up ] # i
};
key <AD09> {
symbols[Group2]= [ End ] # o
};
key <AD10> {
symbols[Group2]= [ Prior ] # p
};
key <AC07> {
symbols[Group2]= [ Left ] # j
};
key <AC08> {
symbols[Group2]= [ Down ] # k
};
key <AC09> {
symbols[Group2]= [ Right ] # l
};
key <AC10> {
symbols[Group2]= [ Next ] # ;
};
key <AB06> {
symbols[Group2]= [ Delete ] # n
};
};
然后,您可以选择一个密钥用作 Group2 激活密钥。您可以使用以下命令查看所有选项(如果您不想自己动手):
$ grep grp /usr/share/X11/xkb/rules/base.lst
然后选择一个选项,例如这个选项仅在Caps Lock按住时激活箭头。它还添加了一个新的组合Alt+Caps Lock来实际打开和关闭大写锁定:
$ setxkbmap -option grp:caps_switch
您可以将其添加到您的 Xorg 配置文件中以使更改永久生效 - 网上有很多关于如何执行此操作的指南。
注意:
key
被使用,而不是replace key
因为我们想要添加到现有定义,而不是替换它。- 如果您实际上有备用键盘布局(可能是一些也可以输入拉丁/英语字母的国际键盘),则此方法可能不适合您。您必须定义一个基于
ALPHANUMERIC
扩展修饰符(例如 Hyper)的新类型才能激活箭头键。
答案2
您可能对我的 xkb 配置脚本感兴趣。简而言之,我定义了 Miniguru 和 TEX Yoda 的仿真。