私は次のように定義しようとします。
xkb_types "complete" {
type "COMPLETE_LEVEL" {
modifiers = Alt+Shift+Control+Super;
map[None] = Level1;
map[Shift] = Level2;
map[Control] = Level3;
map[Control+Shift] = Level4;
map[Alt] = Level5;
map[Alt+Shift] = Level6;
map[Super] = Level7;
map[Super+Shift] = Level8;
map[Control+Alt] = Level8;
map[Control+Alt+Shift] = Level8;
map[Control+Alt+Super] = Level8;
map[Control+Alt+Super+Shift] = Level8;
map[Control+Super] = Level8;
map[Control+Super+Shift] = Level8;
map[Alt+Super] = Level8;
map[Alt+Super+Shift] = Level8;
level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "Control Base";
level_name[Level4] = "Control Shift";
level_name[Level5] = "Alt Base";
level_name[Level6] = "Alt Shift";
level_name[Level7] = "Super Base";
level_name[Level8] = "Disabled";
};
}
xkb_symbols "pc+us+inet(evdev)" {
key.type = "COMPLETE_LEVEL";
key <AE01> { [ 1, exclam, ∅, ∅, ∅, ∅, ∅, ∅ ] };
}
(∅はVoidSymbolに置き換えられます)が、この定義以降は感嘆符すら取得できません。私の構文に問題がありますか?それともタイプ/シンボルがどのように機能するかを誤解していますか?
より明確に言えば、特定のキーの組み合わせが何もせず、未変更の文字のみを出力するようにします。たとえば、Super+1 に 1 だけを出力させる代わりに、何もしないでください。まるでキーを押さなかったのと同じでなければなりません。上記のようにすれば他のキャラクターでも制御できるようです。上記の目標は、「1」が修飾子なしで「1」を出力し、Shiftキーを押し続けると「1」が「!」を出力することです。 「1」は、同時に他の修飾子を押し続けると何も出力しません。上記で得たのは、どの修飾子を選択しても、Shiftでも「1」が「1」を出力することです。つまり、実際に「!」を入力できないという意味です。