Fix "mac style" numpad
[xorg/xkeyboard-config] / types / extra
1 partial default xkb_types "default" {
2     // Definition for a key type used for the czech keymap, for instance.
3     // Defines style a with four level shift. It is similar to three_level
4     // type used for iso9995 but it lets the shift key behave "normally".
5
6     virtual_modifiers LevelThree;
7
8     type "FOUR_LEVEL" {
9         modifiers = Shift+LevelThree;
10         map[None] = Level1;
11         map[Shift] = Level2;
12         map[LevelThree] = Level3;
13         map[Shift+LevelThree] = Level4;
14         level_name[Level1] = "Base";
15         level_name[Level2] = "Shift";
16         level_name[Level3] = "Alt Base";  
17         level_name[Level4] = "Shift Alt";  
18     };
19
20     type "FOUR_LEVEL_ALPHABETIC" {
21         modifiers = Shift+Lock+LevelThree;
22         map[None] = Level1;
23         map[Shift] = Level2;
24         map[Lock]  = Level2;
25         map[LevelThree] = Level3;
26         map[Shift+LevelThree] = Level4;
27         map[Lock+LevelThree] =  Level4;
28         map[Lock+Shift+LevelThree] =  Level3;
29         level_name[Level1] = "Base";
30         level_name[Level2] = "Shift";
31         level_name[Level3] = "Alt Base";
32         level_name[Level4] = "Shift Alt";
33     };
34
35     type "FOUR_LEVEL_SEMIALPHABETIC" {
36         modifiers = Shift+Lock+LevelThree;
37         map[None] = Level1;
38         map[Shift] = Level2;
39         map[Lock]  = Level2;
40         map[LevelThree] = Level3;
41         map[Shift+LevelThree] = Level4;
42         map[Lock+LevelThree] =  Level3;
43         map[Lock+Shift+LevelThree] = Level4;
44         preserve[Lock+LevelThree] = Lock;
45         preserve[Lock+Shift+LevelThree] = Lock;
46         level_name[Level1] = "Base";
47         level_name[Level2] = "Shift";
48         level_name[Level3] = "Alt Base";
49         level_name[Level4] = "Shift Alt";
50     };
51
52     // Another four level keypad variant
53     // First two levels are controled by NumLock (with active Shift-ing like
54     // in KEYPAD). LevelThree overrides this mode, with two additional
55     // Shift-ed levels
56     // NumLock state is intentionnaly ignored when LevelThree is active
57     type "FOUR_LEVEL_MIXED_KEYPAD" {
58         modifiers = Shift+NumLock+LevelThree;
59         map[None] = Level1;
60         map[Shift+NumLock] = Level1;
61         map[NumLock] = Level2;
62         map[Shift] = Level2;
63         map[LevelThree] = Level3;
64         map[NumLock+LevelThree] = Level3;
65         map[Shift+LevelThree] = Level4;
66         map[Shift+NumLock+LevelThree] = Level4;
67         level_name[Level1] = "Base";
68         level_name[Level2] = "Number";
69         level_name[Level3] = "Alt Base";
70         level_name[Level4] = "Shift Alt";
71     };
72
73     // Base level, two Shift-ed LevelThree levels, one Ctrl+Alt command level
74     type "FOUR_LEVEL_X" {
75         modifiers = Shift+LevelThree+Control+Alt;
76         map[None] = Level1;
77         map[LevelThree] = Level2;
78         map[Shift+LevelThree] = Level3;
79         map[Control+Alt] = Level4;
80         level_name[Level1] = "Base";
81         level_name[Level2] = "Alt Base";
82         level_name[Level3] = "Shift Alt";
83         level_name[Level4] = "Ctrl+Alt";
84     };
85
86 // Special type for keys used in Serbian Latin Unicode map
87 // It makes it possible to use all three forms of latin letters 
88 // present in Unicode that are made up of two separate letters 
89 // (forms like LJ, Lj, and lj; NJ, Nj, and nj; etc)
90
91     type "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC" {
92         modifiers = Shift+Lock+LevelThree;
93         map[None] = Level1;
94         map[Shift] = Level2;
95         map[Lock] = Level4;
96         map[LevelThree] = Level3;
97         map[Shift+LevelThree] = Level4;
98         map[Lock+LevelThree] =  Level3;
99         map[Lock+Shift+LevelThree] = Level3;
100         preserve[Lock]= Lock;
101         preserve[Lock+LevelThree]= Lock;
102         level_name[Level1] = "Base";
103         level_name[Level2] = "Shift";
104         level_name[Level3] = "AltGr Base";
105         level_name[Level4] = "Shift AltGr";
106     };
107
108 // type for e.g. german ssharp which is capitalized SS.
109 // CHARACTERISTICS:
110 // It is FOUR_LEVEL with the exception that the fifth level
111 // is mapped to the Lock modifier.
112 // If other modifiers are used, the Lock state is ignored.
113 // DETAILS ABOUT GERMAN:
114 // The capital form of ssharp (called sharp s) only exists for
115 // completely capitalized Text, not at the beginning of sentences
116 // or nouns (nouns have a captial letter at the beginning in german).
117 // The ssharp key, to the right of the zero key, takes this into
118 // account and has a questionmark mapped on shift-ssharp since
119 // normally no capital version is needed.
120 // When typing with active capsLock, this key type is needed to
121 // output two capital letters S because this is the only german key
122 // whose capital letter is not the same as the one typed with shift.
123
124     type "FOUR_LEVEL_PLUS_LOCK" {
125         modifiers = Shift+Lock+LevelThree;
126         map[None] = Level1;
127         map[Shift] = Level2;
128         map[LevelThree] = Level3;
129         map[Shift+LevelThree] = Level4;
130         map[Lock]  = Level5;
131         map[Lock+Shift] = Level2;
132         map[Lock+LevelThree] = Level3;
133         map[Lock+Shift+LevelThree] = Level4;
134         level_name[Level1] = "Base";
135         level_name[Level2] = "Shift";
136         level_name[Level3] = "Alt Base";
137         level_name[Level4] = "Shift Alt";
138         level_name[Level5] = "Lock";
139     };
140 };
141
142 // This enables the four level shifting also for the keypad.
143 partial xkb_types "keypad" {
144     virtual_modifiers LevelThree;
145
146     type "FOUR_LEVEL_KEYPAD" {
147         modifiers = Shift+NumLock+LevelThree;
148         map[None] = Level1;
149         map[Shift] = Level2;
150         map[NumLock] = Level2;
151         map[Shift+NumLock] = Level1;
152         map[LevelThree] = Level3;
153         map[Shift+LevelThree] = Level4;
154         map[NumLock+LevelThree] = Level4;
155         map[Shift+NumLock+LevelThree] = Level3;
156         level_name[Level1] = "Base";
157         level_name[Level2] = "Number";
158         level_name[Level3] = "Alt Base";
159         level_name[Level4] = "Alt Number";
160     };       
161 };