ターミナルキーバインディングの特定のキーをAltとAltGrと組み合わせることができないのはなぜですか?

ターミナルキーバインディングの特定のキーをAltとAltGrと組み合わせることができないのはなぜですか?

いくつかのzle関数(たとえば、Altや「{」)をバインドしたいのですが、関数を書いたM-{としても、を押すと端末が実行されないことがわかりました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-AltGrM-AltGr

を押すと、M-AltGr端末は2つのイベントを受信します。

64 Alt_L
108 ISO_Level3_Shift

「a」を押すと、端末は1つのイベントを受信します。

24 bar

これは、AltGr+aがバー文字を生成するようにレイアウトをカスタマイズしたためです。


以下は問題を説明するgifです。
を押しM-AltGrてから「a」を5回押し、次に「x」を5回押します。

ここに画像の説明を入力してください。


キーボードのすべてのキーをテストしましたが、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を除くすべてのキーを組み合わせることができます。 1つの顕著な違いは、を押すと、M-AltGr端末が次の2つのイベントを受信することです。

64 Alt_L
68 Alt_R

変える:

64 Alt_L
108 ISO_Level3_Shift

OSの起動時に、次のシェルコマンドを実行するスクリプトを実行してキーボードレイアウトを設定しました。

$ 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-xEscape |M-AltGr-a

関連情報