default partial xkb_types "pc" { virtual_modifiers NumLock; type "KEYPAD" { modifiers = NumLock; map[None] = Level1; map[NumLock] = Level2; level_name[Level1] = "Base"; level_name[Level2] = "Number"; }; }; // On Mac keypads, levels 1 and 2 are swapped. partial xkb_types "mac" { type "KEYPAD" { modifiers = None; map[None] = Level2; level_name[Level2] = "Number"; }; }; partial xkb_types "microsoft" { include "numpad(pc)" }; // Swiss-German style numeric keypad: Shift and NumLock operate as // two independent modifiers; however, since we want shift state for // the cursor keys, only three levels are used from the key mappings. // Closest type is actually FOUR_LEVEL_X, but most numpad layouts use // FOUR_LEVEL_MIXED_KEYPAD, so that's the one we are going to override. partial xkb_types "shift3" { virtual_modifiers Alt, NumLock; type "FOUR_LEVEL_MIXED_KEYPAD" { modifiers = Shift + NumLock + Control + Alt; // NumLock Off => navigate using cursor keys map[None] = Level1; // NumLock Off + Shift pressed => select using cursor keys preserve[Shift] = Shift; // NumLock On => decimal digits map[NumLock] = Level2; // NumLock On + Shift pressed => auxiliary symbols, // e.g. hexadecimal digits map[Shift+NumLock] = Level3; // Ctrl and Alt, regardless of NumLock and Shift => command keys preserve[Control] = Control; preserve[Alt] = Alt; preserve[Shift+Control] = Shift + Control; preserve[Shift+Alt] = Shift + Alt; map [NumLock+Control] = Level2; preserve[NumLock+Control] = Control; map [NumLock+Alt] = Level2; preserve[NumLock+Alt] = Alt; map [Control+Alt] = Level4; map [Shift+NumLock+Control] = Level3; preserve[Shift+NumLock+Control] = Control; map [Shift+NumLock+Alt] = Level3; preserve[Shift+NumLock+Alt] = Alt; map [Shift+Control+Alt] = Level4; preserve[Shift+Control+Alt] = Shift; map [NumLock+Control+Alt] = Level2; preserve[NumLock+Control+Alt] = Control+Alt; map [Shift+NumLock+Control+Alt] = Level3; preserve[Shift+NumLock+Control+Alt] = Control+Alt; level_name[Level1] = "Base"; level_name[Level2] = "NumLock"; level_name[Level3] = "Shift+NumLock"; level_name[Level4] = "Ctrl+Alt"; }; };