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

Ali*_*yhl 6 x11 xmodmap xkb keyboard-layout

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

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

Gil*_*il' 5

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

keysym A = a A aring Aring
keysym O = o O oslash Ooblique
keysym W = w W ae AE
Run Code Online (Sandbox Code Playgroud)

将这些指令放在一个文件中,例如~/.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
Run Code Online (Sandbox Code Playgroud)


Whi*_*bat 3

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

\n\n

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

\n\n

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

\n\n

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

\n\n
type "FOUR_LEVEL_ALPHABETIC" {\n    modifiers= Shift+Lock+LevelThree;\n    map[Shift]= Level2;\n    map[Lock]= Level2;\n    map[LevelThree]= Level3;\n    map[Shift+LevelThree]= Level4;\n    map[Lock+LevelThree]= Level4;\n    map[Shift+Lock+LevelThree]= Level3;\n    level_name[Level1]= "Base";\n    level_name[Level2]= "Shift";\n    level_name[Level3]= "Alt Base";\n    level_name[Level4]= "Shift Alt";\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n
key <AD02> {\n        type= "FOUR_LEVEL_ALPHABETIC",\n        symbols[Group1]= [  w, W, aring, Aring ]\n    };\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n
key <AD02> {\n        type= "FOUR_LEVEL_ALPHABETIC",\n        symbols[Group1]= [  w, W, ae, AE ]\n    };\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n