我想将一些 zle 函数绑定到M-{
(即 Alt 和“{”),但我注意到无论我如何编写该函数,当我按 时终端都不会运行它M-{
。
要发送{
到终端,我按AltGr-x
,M-{
实际上也是如此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