如何将 AltGr+key 绑定到符号?

如何将 AltGr+key 绑定到符号?

我想将AltGr+绑定Wæ以及其他一些组合,我该怎么做?我还需要AltGr++ShiftW.Æ

我通常用来setxkbmap更改键盘映射。

答案1

这很容易做到xmodmap。您可以使用keysym指令来更改与某个键关联的键符号。这会影响当前使用任何修饰符组合发送此键符号的所有键。对于普通的可打印字符,四个键符号分别是裸键、带键Shift、带键AltGrAltGr+键Shift

keysym A = a A aring Aring
keysym O = o O oslash Ooblique
keysym W = w W ae AE

将这些指令放入文件中,例如~/.Xmodmap,并使用 加载它们xmodmap ~/.Xmodmap~/.Xmodmap当您在某些环境中登录时,调用的文件会自动加载(这取决于您的unix版本和桌面环境)。

您可以在/usr/share/X11/locale/en_US.UTF-8/Compose或中找到键符号名称/usr/include/X11/keysymdef.h(Debian 位置,在其他系统上可能有所不同)。如果您不知道符号的键符号名称,可以使用其 Unicode 编号:U后跟十六进制数字,例如

keysym W = w W U00e6 U00c6

答案2

您可以使用自定义 XKB 地图来实现这一点。我建议您使用 转储当前地图xkbcomp $DISPLAY dump.xkb,编辑它并使用 加载它xkbcomp newmap.xkb $DISPLAY。转储文件非常大并且有很多多余的信息。

进行编辑的最简单方法是查找 altgr 在当前地图中的使用情况。通常是 ISO_LEVEL3 修饰符。如果您当前的键盘映射不使用 altgr,您可以尝试加载一个使用 altgr 的键盘映射,看看如何完成。例如,-layout us -variant altgr-intl它非常广泛,并且绑定了大多数(如果不是全部)欧洲钥匙。下面是对正在发生的事情的简短介绍。

xkb 从内核获取键码,为每个键码设置一个标签,并使用该标签和修饰键来决定它应该输出什么键符号。每个键都分配有一个类型,该类型定义了它期望的修饰键以及每个组合的输出内容。查看您得到的转储xkbcomp:标签在 中定义xkb_keycodes,类型在 中xkb_types,标签到键符号在 中xkb_symbols。其中,xkb_symbols您要编辑并参考其他两个以了解要更改的内容。您还可以查看xkb_symbols并了解其当前的完成方式并进行适当的编辑。

xkb_types部分包含不同的键定义修饰符级别,您需要一个具有 altgr 和 Shift 模式的修饰符级别。例子:

type "FOUR_LEVEL_ALPHABETIC" {
    modifiers= Shift+Lock+LevelThree;
    map[Shift]= Level2;
    map[Lock]= Level2;
    map[LevelThree]= Level3;
    map[Shift+LevelThree]= Level4;
    map[Lock+LevelThree]= Level4;
    map[Shift+Lock+LevelThree]= Level3;
    level_name[Level1]= "Base";
    level_name[Level2]= "Shift";
    level_name[Level3]= "Alt Base";
    level_name[Level4]= "Shift Alt";
};

这意味着标记为的键FOUR_LEVEL_ALPHABETIC有四种模式。 Normal、shift/caps、altgr、altgr-shift 听起来像是您正在寻找的。

如果您还不知道 w 的键码,现在您想知道它是什么。 xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'为您提供您按下的按键的键码。grep是为了使输出更具可读性。

xkb_keycodes将您获得的键码与之前获得的转储映射部分进行交叉引用。对我来说, w 给出键码 25。less转储并以 , <LABEL> = ##;example的形式找到正确的键码<AD02> = 25;。或者cat dump.xkb| grep ' = 25;'Label 只是 xkb 在后面部分中用来引用密钥的名称。

现在您已经有了标签,请转到xkb_symbols实际将标签映射到键符号的位置。格式为

key <AD02> {
        type= "FOUR_LEVEL_ALPHABETIC",
        symbols[Group1]= [  w, W, aring, Aring ]
    };

type=是您想要从部分中获得的类型xkb_typessymbols[Group1]=对于该类型所需的每种模式都有一个键符号。同样,这种类型的正常、shift/caps、altgr、shift-altgr。[Group1],据我所知,这是一种使用多个键盘映射的方法,您可以使用您设置的锁定键即时更改。我自己不使用组,所以对我来说一切都是组1。

要查找可以在此处使用的所有不同的键盘符号,请检查/usr/include/X11/keysymdef.h。您要查找的两个符号是aeæ 和AEÆ。

key <AD02> {
        type= "FOUR_LEVEL_ALPHABETIC",
        symbols[Group1]= [  w, W, ae, AE ]
    };

我可能有点胡言乱语了。查看拱门维基百科XKB 上的页面,无论您使用什么操作系统或发行版,它都是好东西。

答案3

在符号(/usr/share/X11/xkb/symbols/XY) 文件中,在键盘变体下找到行{ [ w, W,.显然,这两个对应于小写和大写的 w。现在,在它们之后的第三个和第四个条目分别对应于您按AltGr +wAltGr+ Shift+时得到的内容w

您应该将第三个和第四个字符替换为您想要的字符,或者如果它们不存在,则添加它们。

根据维基百科,它们的(ae,AE)unicode点分别是U + 00E6和U + 00C6,所以你的符号文件的新编辑行应该是(省略+号)

{ [         w,          W,   U00E6,   U00C6 ]   };

更新此文件的系统更新会覆盖它,因此您最好在家中的某个地方保留此编辑文件的副本,并且每当它被更新覆盖时,用命令替换它

sudo cp /YOUR/BACKUP/SYMBOL_FILE /usr/share/X11/xkb/symbols/SYMBOL_FILE

相关内容