1//
2// X keyboard maps for Finland
3//
4// SFS 5966 / Kotoistus keymap created by Troy Korjuslommi
5// Classic keymap based on traditional by Marko Myllynen
6// Eliminate deadkeys alternative sent by Linus Torvalds
7//
8
9default partial alphanumeric_keys
10xkb_symbols "kotoistus" {
11
12    // Official keymap for Finland based on SFS 5966:2019 standard
13    //
14    // This keymap implements all the functionality of Annex 1
15    // of the standard and additionally defines the following to
16    // allow entering these characters with keyboards without LSGT.
17    //
18    // AE08+4 : U+003C LESS-THAN SIGN     (less)
19    // AE09+4 : U+003E GREATER-THAN SIGN  (greater)
20    // AD08+4 : U+007C VERTICAL LINE      (bar)
21    //
22    // Annex 3 of the standard is implemented in fi_FI.UTF-8/Compose.
23    //
24    // This keymap implements regular space in position "A-3" of the
25    // standard and implements NARROW NO-BREAK SPACE (U+202F) in A-4.
26    //
27    // The following definitions are also included to allow entering
28    // Greek letters and currency symbols with the libX11 sequences.
29    //
30    // AC08+4 : dead_greek
31    // AC09+4 : dead_currency
32
33    name[Group1]="Finnish";
34
35    key <TLDE> { [  section,         onehalf,          dead_stroke,           NoSymbol              ] };
36    key <AE01> { [  1,               exclam,           NoSymbol,              exclamdown            ] };
37    key <AE02> { [  2,               quotedbl,         at,                    rightdoublequotemark  ] };
38    key <AE03> { [  3,               numbersign,       sterling,              guillemotright        ] };
39    key <AE04> { [  4,               currency,         dollar,                guillemotleft         ] };
40    key <AE05> { [  5,               percent,          permille,              leftdoublequotemark   ] };
41    key <AE06> { [  6,               ampersand,        singlelowquotemark,    doublelowquotemark    ] };
42    key <AE07> { [  7,               slash,            braceleft,             NoSymbol              ] };
43    key <AE08> { [  8,               parenleft,        bracketleft,           less                  ] };
44    key <AE09> { [  9,               parenright,       bracketright,          greater               ] };
45    key <AE10> { [  0,               equal,            braceright,            degree                ] };
46    key <AE11> { [  plus,            question,         backslash,             questiondown          ] };
47    key <AE12> { [  dead_acute,      dead_grave,       dead_cedilla,          dead_ogonek           ] };
48
49    key <AD01> { [  q,               Q,                q,                     Q                     ] };
50    key <AD02> { [  w,               W,                w,                     W                     ] };
51    key <AD03> { [  e,               E,                EuroSign,              NoSymbol              ] };
52    key <AD04> { [  r,               R,                r,                     R                     ] };
53    key <AD05> { [  t,               T,                thorn,                 THORN                 ] };
54    key <AD06> { [  y,               Y,                y,                     Y                     ] };
55    key <AD07> { [  u,               U,                u,                     U                     ] };
56    key <AD08> { [  i,               I,                idotless,              bar                   ] };
57    key <AD09> { [  o,               O,                oe,                    OE                    ] };
58    key <AD10> { [  p,               P,                dead_horn,             dead_hook             ] };
59    key <AD11> { [  aring,           Aring,            dead_doubleacute,      dead_abovering        ] };
60    key <AD12> { [  dead_diaeresis,  dead_circumflex,  dead_tilde,            dead_macron           ] };
61
62    key <AC01> { [  a,               A,                schwa,                 SCHWA                 ] };
63    key <AC02> { [  s,               S,                ssharp,                U1E9E                 ] };
64    key <AC03> { [  d,               D,                eth,                   ETH                   ] };
65    key <AC04> { [  f,               F,                f,                     F                     ] };
66    key <AC05> { [  g,               G,                g,                     G                     ] };
67    key <AC06> { [  h,               H,                h,                     H                     ] };
68    key <AC07> { [  j,               J,                j,                     J                     ] };
69    key <AC08> { [  k,               K,                kra,                   dead_greek            ] };
70    key <AC09> { [  l,               L,                dead_stroke,           dead_currency         ] };
71    key <AC10> { [  odiaeresis,      Odiaeresis,       oslash,                Oslash                ] };
72    key <AC11> { [  adiaeresis,      Adiaeresis,       ae,                    AE                    ] };
73    key <BKSL> { [  apostrophe,      asterisk,         dead_caron,            dead_breve            ] };
74
75    key <LSGT> { [  less,            greater,          bar,                   NoSymbol              ] };
76    key <AB01> { [  z,               Z,                ezh,                   EZH                   ] };
77    key <AB02> { [  x,               X,                multiply,              periodcentered        ] };
78    key <AB03> { [  c,               C,                c,                     C                     ] };
79    key <AB04> { [  v,               V,                v,                     V                     ] };
80    key <AB05> { [  b,               B,                b,                     B                     ] };
81    key <AB06> { [  n,               N,                eng,                   ENG                   ] };
82    key <AB07> { [  m,               M,                mu,                    emdash                ] };
83    key <AB08> { [  comma,           semicolon,        rightsinglequotemark,  leftsinglequotemark   ] };
84    key <AB09> { [  period,          colon,            dead_belowdot,         dead_abovedot         ] };
85    key <AB10> { [  minus,           underscore,       endash,                dead_belowcomma       ] };
86
87    key <SPCE> { [  space,           space,            space,                 U202F                 ] };
88
89    include "kpdl(comma)"
90    include "level3(ralt_switch)"
91};
92
93partial alphanumeric_keys
94xkb_symbols "winkeys" {
95
96    include "fi(kotoistus)"
97
98    name[Group1]="Finnish (Windows)";
99
100    include "eurosign(5)"
101};
102
103hidden partial alphanumeric_keys
104xkb_symbols "fi" {
105
106    // Classic Finnish keyboard layout with dead keys
107
108    key <TLDE> { [  section,         onehalf,          onequarter,            threequarters         ] };
109    key <AE01> { [  1,               exclam,           exclamdown,            onesuperior           ] };
110    key <AE02> { [  2,               quotedbl,         at,                    twosuperior           ] };
111    key <AE03> { [  3,               numbersign,       sterling,              threesuperior         ] };
112    key <AE04> { [  4,               currency,         dollar,                cent                  ] };
113    key <AE05> { [  5,               percent,          EuroSign,              masculine             ] };
114    key <AE06> { [  6,               ampersand,        yen,                   ordfeminine           ] };
115    key <AE07> { [  7,               slash,            braceleft,             plusminus             ] };
116    key <AE08> { [  8,               parenleft,        bracketleft,           less                  ] };
117    key <AE09> { [  9,               parenright,       bracketright,          greater               ] };
118    key <AE10> { [  0,               equal,            braceright,            degree                ] };
119    key <AE11> { [  plus,            question,         backslash,             questiondown          ] };
120    key <AE12> { [  dead_acute,      dead_grave,       dead_cedilla,          dead_ogonek           ] };
121
122    key <AD01> { [  q,               Q,                q,                     Q                     ] };
123    key <AD02> { [  w,               W,                w,                     W                     ] };
124    key <AD03> { [  e,               E,                EuroSign,              cent                  ] };
125    key <AD04> { [  r,               R,                registered,            NoSymbol              ] };
126    key <AD05> { [  t,               T,                thorn,                 THORN                 ] };
127    key <AD06> { [  y,               Y,                y,                     Y                     ] };
128    key <AD07> { [  u,               U,                u,                     U                     ] };
129    key <AD08> { [  i,               I,                idotless,              bar                   ] };
130    key <AD09> { [  o,               O,                o,                     O                     ] };
131    key <AD10> { [  p,               P,                paragraph,             NoSymbol              ] };
132    key <AD11> { [  aring,           Aring,            oe,                    OE                    ] };
133    key <AD12> { [  dead_diaeresis,  dead_circumflex,  dead_tilde,            dead_caron            ] };
134
135    key <AC01> { [  a,               A,                schwa,                 SCHWA                 ] };
136    key <AC02> { [  s,               S,                scaron,                Scaron                ] };
137    key <AC03> { [  d,               D,                eth,                   ETH                   ] };
138    key <AC04> { [  f,               F,                f,                     F                     ] };
139    key <AC05> { [  g,               G,                eng,                   ENG                   ] };
140    key <AC06> { [  h,               H,                h,                     H                     ] };
141    key <AC07> { [  j,               J,                j,                     J                     ] };
142    key <AC08> { [  k,               K,                kra,                   dead_greek            ] };
143    key <AC09> { [  l,               L,                dead_stroke,           dead_currency         ] };
144    key <AC10> { [  odiaeresis,      Odiaeresis,       oslash,                Oslash                ] };
145    key <AC11> { [  adiaeresis,      Adiaeresis,       ae,                    AE                    ] };
146    key <BKSL> { [  apostrophe,      asterisk,         dead_caron,            dead_breve            ] };
147
148    key <LSGT> { [  less,            greater,          bar,                   brokenbar             ] };
149    key <AB01> { [  z,               Z,                zcaron,                Zcaron                ] };
150    key <AB02> { [  x,               X,                multiply,              division              ] };
151    key <AB03> { [  c,               C,                copyright,             cent                  ] };
152    key <AB04> { [  v,               V,                v,                     V                     ] };
153    key <AB05> { [  b,               B,                ssharp,                U1E9E                 ] };
154    key <AB06> { [  n,               N,                ntilde,                Ntilde                ] };
155    key <AB07> { [  m,               M,                mu,                    NoSymbol              ] };
156    key <AB08> { [  comma,           semicolon,        dead_cedilla,          dead_ogonek           ] };
157    key <AB09> { [  period,          colon,            periodcentered,        notsign               ] };
158    key <AB10> { [  minus,           underscore,       hyphen,                dead_macron           ] };
159
160    key <SPCE> { [  space,           space,            space,                 U202F                 ] };
161
162    include "kpdl(comma)"
163    include "level3(ralt_switch)"
164};
165
166partial alphanumeric_keys
167xkb_symbols "classic" {
168
169    include "fi(fi)"
170
171    name[Group1]="Finnish (classic)";
172};
173
174partial alphanumeric_keys
175xkb_symbols "nodeadkeys" {
176
177    // Classic Finnish keyboard layout without dead keys
178
179    include "fi(fi)"
180
181    name[Group1]="Finnish (classic, no dead keys)";
182
183    key <AE12> { [  acute,           grave,            cedilla,               ogonek                ] };
184    key <AD12> { [  diaeresis,       asciicircum,      asciitilde,            caron                 ] };
185    key <AC09> { [  l,               L,                l,                     L                     ] };
186    key <BKSL> { [  apostrophe,      asterisk,         caron,                 breve                 ] };
187    key <AB08> { [  comma,           semicolon,        cedilla,               ogonek                ] };
188    key <AB10> { [  minus,           underscore,       hyphen,                macron                ] };
189};
190
191partial alphanumeric_keys
192xkb_symbols "smi" {
193
194    // Describes the differences between a Norwegian Northern Sami
195    // (keyboard with dead key support) and a Swedish/Finnish Sami
196    // keyboard according to the specs at:
197    // http://www.hum.uit.no/a/trond/se-lat9-sefi-keys.html
198
199    include "no(smi)"
200
201    name[Group1]="Northern Saami (Finland)";
202
203    key <AC10> { [  odiaeresis,      Odiaeresis,       oslash,                Oslash                ] };
204    key <AC11> { [  adiaeresis,      Adiaeresis,       ae,                    AE                    ] };
205};
206
207partial alphanumeric_keys
208xkb_symbols "mac" {
209
210    // Macintosh keyboard for Finland based on Swedish(Macintosh) keyboard
211
212    include "se(mac)"
213
214    name[Group1]="Finnish (Macintosh)";
215};
216
217partial alphanumeric_keys
218xkb_symbols "sun_type6" {
219
220    // Sun Type 6/7 keyboard for Finland
221
222    include "sun_vndr/fi(sun_type6)"
223
224    name[Group1]="Finnish (Sun Type 6/7)";
225};
226
227partial
228xkb_symbols "das" {
229
230    // DAS layout for typing Finnish designed by Cristian Seres (cseres at iki.fi).
231    // More information about DAS is available at http://c.seres.fi/DAS_en.html.
232    // This xkeyboard layout was created by Joel Lehtonen (joel.lehtonen at iki.fi),
233    // and he released it to public domain.
234
235    name[Group1]="Finnish (DAS)";
236
237    key <AE01> { [  1,               exclam,           section                                      ] };
238    key <AE02> { [  2,               quotedbl,         twosuperior                                  ] };
239    key <AE03> { [  3,               at,               sterling                                     ] };
240    key <AE04> { [  4,               EuroSign,         dollar                                       ] };
241    key <AE05> { [  5,               percent,          onehalf                                      ] };
242    key <AE06> { [  6,               ampersand                                                      ] };
243    key <AE07> { [  7,               braceleft                                                      ] };
244    key <AE08> { [  8,               parenleft,        bracketleft                                  ] };
245    key <AE09> { [  9,               parenright,       bracketright                                 ] };
246    key <AE10> { [  0,               braceright,       degree                                       ] };
247    key <AE11> { [  plus,            question,         currency                                     ] };
248    key <AE12> { [  equal,           numbersign                                                     ] };
249
250    key <AD01> { [  p,               P,                Greek_pi                                     ] };
251    key <AD02> { [  h,               H                                                              ] };
252    key <AD03> { [  r,               R,                dead_circumflex                              ] };
253    key <AD04> { [  k,               K,                dead_caron                                   ] };
254    key <AD05> { [  less,            greater                                                        ] };
255    key <AD06> { [  apostrophe,      bar                                                            ] };
256    key <AD07> { [  w,               W                                                              ] };
257    key <AD08> { [  u,               U                                                              ] };
258    key <AD09> { [  y,               Y                                                              ] };
259    key <AD10> { [  b,               B                                                              ] };
260    key <AD11> { [  q,               Q                                                              ] };
261    key <AD12> { [  z,               Z,                zcaron,                Zcaron                ] };
262
263    key <AC01> { [  s,               S,                scaron,                Scaron                ] };
264    key <AC02> { [  l,               L,                dead_acute                                   ] };
265    key <AC03> { [  n,               N,                dead_grave                                   ] };
266    key <AC04> { [  t,               T,                dead_diaeresis                               ] };
267    key <AC05> { [  v,               V                                                              ] };
268    key <AC06> { [  g,               G                                                              ] };
269    key <AC07> { [  a,               A                                                              ] };
270    key <AC08> { [  i,               I                                                              ] };
271    key <AC09> { [  o,               O                                                              ] };
272    key <AC10> { [  e,               E                                                              ] };
273    key <AC11> { [  c,               C                                                              ] };
274    key <TLDE> { [  backslash,       dead_tilde                                                     ] };
275
276    key <BKSL> { [  asterisk,        slash                                                          ] };
277    key <LSGT> { [  f,               F                                                              ] };
278    key <AB01> { [  x,               X                                                              ] };
279    key <AB02> { [  d,               D                                                              ] };
280    key <AB03> { [  m,               M,                mu                                           ] };
281    key <AB04> { [  j,               J                                                              ] };
282    key <AB05> { [  aring,           Aring                                                          ] };
283    key <AB06> { [  odiaeresis,      Odiaeresis,       oe,                    OE                    ] };
284    key <AB07> { [  adiaeresis,      Adiaeresis,       ae,                    AE                    ] };
285    key <AB08> { [  comma,           semicolon                                                      ] };
286    key <AB09> { [  period,          colon                                                          ] };
287    key <AB10> { [  minus,           underscore,       U2013,                 dead_macron           ] };
288    key <SPCE> { [  space,           space,            space,                 nobreakspace          ] };
289
290    include "kpdl(comma)"
291    include "level3(ralt_switch)"
292};
293
294partial alphanumeric_keys
295xkb_symbols "fidvorak" {
296
297    // Dvorak keyboard layout for use with Finnish by Pekka Oinas.
298    //
299    // Dedicated keys for Ä and Ö by utilizing the extra LSGT key found on Finnish keyboards
300    // and by moving colon and semicolon behind shift-modifiers on comma and period.
301    // Less and greater than symbols moved behind 3rd level modifiers on comma and period.
302    // Includes an assortment of dead keys but was not created with them in mind.
303
304    name[Group1]="Finnish (Dvorak)";
305
306    key <TLDE> { [  grave,           asciitilde,       dead_grave,            dead_tilde            ] };
307    key <AE01> { [  1,               exclam,           NoSymbol,              exclamdown            ] };
308    key <AE02> { [  2,               at,               cent,                  rightdoublequotemark  ] };
309    key <AE03> { [  3,               numbersign,       sterling                                     ] };
310    key <AE04> { [  4,               dollar,           currency                                     ] };
311    key <AE05> { [  5,               percent,          permille,              leftdoublequotemark   ] };
312    key <AE06> { [  6,               asciicircum,      dead_circumflex,       doublelowquotemark    ] };
313    key <AE07> { [  7,               ampersand,        section,               singlelowquotemark    ] };
314    key <AE08> { [  8,               asterisk                                                       ] };
315    key <AE09> { [  9,               parenleft                                                      ] };
316    key <AE10> { [  0,               parenright,       degree,                dead_abovering        ] };
317    key <AE11> { [  bracketleft,     braceleft                                                      ] };
318    key <AE12> { [  bracketright,    braceright                                                     ] };
319
320    key <AD01> { [  apostrophe,      quotedbl,         dead_acute,            dead_doubleacute      ] };
321    key <AD02> { [  comma,           semicolon,        less,                  leftsinglequotemark   ] };
322    key <AD03> { [  period,          colon,            greater                                      ] };
323    key <AD04> { [  p,               P                                                              ] };
324    key <AD05> { [  y,               Y,                yen                                          ] };
325    key <AD06> { [  f,               F                                                              ] };
326    key <AD07> { [  g,               G                                                              ] };
327    key <AD08> { [  c,               C                                                              ] };
328    key <AD09> { [  r,               R                                                              ] };
329    key <AD10> { [  l,               L,                notsign                                      ] };
330    key <AD11> { [  slash,           question,         NoSymbol,              questiondown          ] };
331    key <AD12> { [  equal,           plus                                                           ] };
332
333    key <AC01> { [  a,               A,                schwa,                 SCHWA                 ] };
334    key <AC02> { [  o,               O,                aring,                 Aring                 ] };
335    key <AC03> { [  e,               E,                EuroSign                                     ] };
336    key <AC04> { [  u,               U,                udiaeresis,            Udiaeresis            ] };
337    key <AC05> { [  i,               I,                idotless,              Iabovedot             ] };
338    key <AC06> { [  d,               D,                eth,                   ETH                   ] };
339    key <AC07> { [  h,               H                                                              ] };
340    key <AC08> { [  t,               T,                thorn,                 THORN                 ] };
341    key <AC09> { [  n,               N,                eng,                   ENG                   ] };
342    key <AC10> { [  s,               S,                ssharp,                U1E9E                 ] };
343    key <AC11> { [  minus,           underscore,       endash,                emdash                ] };
344    key <BKSL> { [  backslash,       bar,              dead_caron,            dead_breve            ] };
345
346    key <LSGT> { [  adiaeresis,      Adiaeresis,       ae,                    AE                    ] };
347    key <AB01> { [  odiaeresis,      Odiaeresis,       dead_diaeresis,        dead_macron           ] };
348    key <AB02> { [  q,               Q,                ooblique,              Ooblique              ] };
349    key <AB03> { [  j,               J                                                              ] };
350    key <AB04> { [  k,               K,                kra                                          ] };
351    key <AB05> { [  x,               X,                multiply,              periodcentered        ] };
352    key <AB06> { [  b,               B,                hyphen                                       ] };
353    key <AB07> { [  m,               M,                mu,                    emdash                ] };
354    key <AB08> { [  w,               W                                                              ] };
355    key <AB09> { [  v,               V                                                              ] };
356    key <AB10> { [  z,               Z,                ezh,                   EZH                   ] };
357
358    include "level3(ralt_switch)"
359};
360