1default partial xkb_types "default" {
2
3    // Defines types with a four-level shift, similar to the three-level
4    // type from iso9995, but they let 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[Shift+Lock+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[Shift+Lock+LevelThree] = Level4;
44	preserve[Lock+LevelThree] = Lock;
45	preserve[Shift+Lock+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    // A four-level keypad variant. The first two levels are controlled by
53    // NumLock (with active shifting like in KEYPAD).  LevelThree overrides
54    // this mode, with two additional shifted levels.
55    type "FOUR_LEVEL_MIXED_KEYPAD" {
56	modifiers = Shift + NumLock + LevelThree;
57	map[None] = Level1;
58	map[Shift+NumLock] = Level1;
59	map[NumLock] = Level2;
60	map[Shift] = Level2;
61	map[LevelThree] = Level3;
62	map[NumLock+LevelThree] = Level3;
63	map[Shift+LevelThree] = Level4;
64	map[Shift+NumLock+LevelThree] = Level4;
65	level_name[Level1] = "Base";
66	level_name[Level2] = "Number";
67	level_name[Level3] = "Alt Base";
68	level_name[Level4] = "Shift Alt";
69    };
70
71    // Base level, two shifted LevelThree levels, one Ctrl+Alt command level.
72    type "FOUR_LEVEL_X" {
73	modifiers = Shift + LevelThree + Control + Alt;
74	map[None] = Level1;
75	map[LevelThree] = Level2;
76	map[Shift+LevelThree] = Level3;
77	map[Control+Alt] = Level4;
78	level_name[Level1] = "Base";
79	level_name[Level2] = "Alt Base";
80	level_name[Level3] = "Shift Alt";
81	level_name[Level4] = "Ctrl+Alt";
82    };
83
84    // A special type for keys used in the Serbian Latin Unicode keymap.
85    // It makes it possible to use all three forms of latin letters
86    // present in Unicode that are made up of two separate letters
87    // (forms like LJ, Lj, and lj; NJ, Nj, and nj; etcetera).
88    type "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC" {
89	modifiers = Shift + Lock + LevelThree;
90	map[None] = Level1;
91	map[Shift] = Level2;
92	map[Lock] = Level4;
93	map[LevelThree] = Level3;
94	map[Shift+LevelThree] = Level4;
95	map[Lock+LevelThree] = Level3;
96	map[Shift+Lock+LevelThree] = Level3;
97	preserve[Lock]= Lock;
98	preserve[Lock+LevelThree]= Lock;
99	level_name[Level1] = "Base";
100	level_name[Level2] = "Shift";
101	level_name[Level3] = "AltGr Base";
102	level_name[Level4] = "Shift AltGr";
103    };
104
105    // Five levels: the normal four levels with Shift and LevelThree,
106    // plus a fifth level when CapsLock (and only CapsLock) is active
107    // -- CapsLock is ignored when Shift and/or LevelThree is held.
108    type "FOUR_LEVEL_PLUS_LOCK" {
109	modifiers = Shift + Lock + LevelThree;
110	map[None] = Level1;
111	map[Shift] = Level2;
112	map[LevelThree] = Level3;
113	map[Shift+LevelThree] = Level4;
114	map[Lock] = Level5;
115	map[Shift+Lock] = Level2;
116	map[Lock+LevelThree] = Level3;
117	map[Shift+Lock+LevelThree] = Level4;
118	level_name[Level1] = "Base";
119	level_name[Level2] = "Shift";
120	level_name[Level3] = "Alt Base";
121	level_name[Level4] = "Shift Alt";
122	level_name[Level5] = "Lock";
123    };
124};
125
126// This enables the four-level shifting also for the keypad.
127partial xkb_types "keypad" {
128
129    virtual_modifiers  LevelThree;
130
131    type "FOUR_LEVEL_KEYPAD" {
132	modifiers = Shift + NumLock + LevelThree;
133	map[None] = Level1;
134	map[Shift] = Level2;
135	map[NumLock] = Level2;
136	map[Shift+NumLock] = Level1;
137	map[LevelThree] = Level3;
138	map[Shift+LevelThree] = Level4;
139	map[NumLock+LevelThree] = Level4;
140	map[Shift+NumLock+LevelThree] = Level3;
141	level_name[Level1] = "Base";
142	level_name[Level2] = "Number";
143	level_name[Level3] = "Alt Base";
144	level_name[Level4] = "Alt Number";
145    };
146};
147