I tried defining something like this:
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, ∅, ∅, ∅, ∅, ∅, ∅ ] };
}
(∅ gets replaced to VoidSymbol) But after this definition, I can't even get an exclamation mark. Is there something wrong with my syntax, or am I just misunderstanding how types/symbols work?
For more clarity, I'm trying to ensure that some key combinations do nothing, rather than just outputting the unmodified character. For example, instead of letting Super+1 just output 1, it should do nothing. It should be as if a key was not pressed. With the above, I should be able to control it with other characters as well. The goal with the above is that "1" should output "1" without any modifiers, "1" should output "!" if shift is held down. And if any other modifiers are held down at the same time, "1" should output nothing. What I'm getting with the above is, "1" outputs "1" if any modifiers are selected, even shift, meaning I can't actually type a "!".