1default partial xkb_types "pc" { 2 type "KEYPAD" { 3 modifiers = Shift + NumLock; 4 map[None] = Level1; 5 map[NumLock] = Level2; 6 map[Shift+NumLock] = Level1; 7 level_name[Level1] = "Base"; 8 level_name[Level2] = "Number"; 9 }; 10 include "extra(keypad)" 11}; 12 13// On Mac keypads, level 1 and 2 are swapped. 14partial xkb_types "mac" { 15 type "KEYPAD" { 16 modifiers = None; 17 map[None] = Level2; 18 level_name[Level2] = "Number"; 19 }; 20 include "extra(keypad)" 21}; 22 23partial xkb_types "microsoft" { 24 type "KEYPAD" { 25 modifiers = Shift + NumLock; 26 map[None] = Level1; 27 preserve[Shift] = Shift; 28 map[NumLock] = Level2; 29 level_name[Level1] = "Base"; 30 level_name[Level2] = "Number"; 31 }; 32 include "extra(keypad)" 33}; 34 35// Swiss-German style numeric keypad: Shift and NumLock operate as 36// two independent modifiers; however, since we want shift state for 37// the cursor keys, only three levels are used from the key mappings. 38// Closest type is actually FOUR_LEVEL_X, but most numpad layouts use 39// FOUR_LEVEL_MIXED_KEYPAD, so that's the one we are going to override. 40partial xkb_types "shift3" { 41 type "FOUR_LEVEL_MIXED_KEYPAD" { 42 modifiers = Shift + NumLock + Control + Alt; 43 44 // NumLock Off => navigate using cursor keys 45 map[None] = Level1; 46 47 // NumLock Off + Shift pressed => select using cursor keys 48 preserve[Shift] = Shift; 49 50 // NumLock On => decimal digits 51 map[NumLock] = Level2; 52 53 // NumLock On + Shift pressed => auxiliary symbols, 54 // e.g. hexadecimal digits 55 map[Shift+NumLock] = Level3; 56 57 // Ctrl + Alt, regardless of NumLock and Shift => command keys 58 map[Control+Alt] = Level4; 59 60 level_name[Level1] = "Base"; 61 level_name[Level2] = "NumLock"; 62 level_name[Level3] = "Shift+NumLock"; 63 level_name[Level4] = "Ctrl+Alt"; 64 }; 65}; 66