为什么终端键绑定中某些键不能与 Alt 和 AltGr 组合?

为什么终端键绑定中某些键不能与 Alt 和 AltGr 组合?

我想将一些 zle 函数绑定到M-{(即 Alt 和“{”),但我注意到无论我如何编写该函数,当我按 时终端都不会运行它M-{

要发送{到终端,我按AltGr-xM-{实际上也是如此M-AltGr-x
我已经跑去$ xev查看终端收到了哪些按键事件。结果如下:

当我按下 时M-AltGr,终端会收到 2 个事件:

64 Alt_L
108 ISO_Level3_Shift

当我按“x”时,终端什么也没收到。
当我释放“x”时,终端收到 2 个事件:

64 Alt_L
108 ISO_Level3_Shift

我认为这可能是一个根本性的限制,没有任何键可以与M-AltGr.但经过更多测试后我发现M-AltGr可以与“a”组合。

当我按下 时M-AltGr,终端会收到 2 个事件:

64 Alt_L
108 ISO_Level3_Shift

当我按“a”时,终端会收到 1 个事件:

24 bar

因为我已经自定义了布局,以便 AltGr + a 发出条形字符


这是一个 gif 来说明这个问题。
我按M-AltGr,然后按“a”五次,然后按“x”五次:

在此输入图像描述


我测试了键盘上的所有键,M-AltGr除了这 25 个之外,所有键都可以与 组合:

1
6
8
keypad_3
keypad_7
keypad_8
lower than sign
CapsLock
F1
F2
F3
F5
PgDown
Tab
b
d
f
g
i
j
o
u
v
w
x

我认为问题可能出在我的键盘布局上,所以我暂时切换到默认的英文布局。但结果似乎是相同的:M-AltGr除了前面 25 个之外,所有键都可以组合。一个明显的区别是,当我按 时M-AltGr,终端会收到以下两个事件:

64 Alt_L
68 Alt_R

代替:

64 Alt_L
108 ISO_Level3_Shift

我通过在操作系统启动时运行脚本来设置键盘布局,该脚本运行以下 shell 命令:

$ xkbcomp -I"$HOME/.config/keyboard/xkb" "$HOME/.config/keyboard/xkb/map" "$DISPLAY"

该文件~/.config/keyboard/xkb/map包含以下 xkb 代码:

xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(azerty)" };
    xkb_types     { include "complete"      };
    xkb_compat    { include "complete"      };
    xkb_symbols   { include "pc+fr(latin9)+programming(special_chars)+modifier(caps_ctrl)+modifier(enter_ctrl)+inet(evdev)+terminate(ctrl_alt_bksp)" };
    xkb_geometry  { include "pc(pc105)"     };
};

我使用的是 Ubuntu 16.04。


为什么有些按键不能与 组合M-AltGr,有办法解决这个问题吗?

我的目标是让终端模拟器(例如 xterm)Escape {在我按下 时接收序列,就像它当前在我按下时M-AltGr-x接收序列一样。Escape |M-AltGr-a

相关内容