나는 다음과 같이 정의하려고 노력합니다.
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"을 출력한다는 것입니다. 즉, 실제로 "!"를 입력할 수 없다는 의미입니다.