@@ -19,12 +19,30 @@ impl KeyboardLayout for Azerty {
19
19
let map_to_unicode = handle_ctrl == HandleControl :: MapLettersToUnicode ;
20
20
match keycode {
21
21
KeyCode :: Escape => DecodedKey :: Unicode ( 0x1B . into ( ) ) ,
22
- KeyCode :: Oem8 => DecodedKey :: Unicode ( '²' ) ,
22
+ // Works with Unicode & 850 code page, not 437
23
+ KeyCode :: Oem8 => {
24
+ if modifiers. is_shifted ( ) {
25
+ DecodedKey :: Unicode ( '³' ) // Not in 437 code page
26
+ } else if modifiers. is_altgr ( ) {
27
+ DecodedKey :: Unicode ( '¹' ) // Not in 437 code page
28
+ } else {
29
+ DecodedKey :: Unicode ( '²' )
30
+ }
31
+ }
32
+ // Works with Unicode, 437 & 850 code pages
23
33
KeyCode :: Oem5 => {
24
34
if modifiers. is_shifted ( ) {
25
- DecodedKey :: Unicode ( '*' )
35
+ if modifiers. is_altgr ( ) {
36
+ DecodedKey :: Unicode ( '≥' )
37
+ } else {
38
+ DecodedKey :: Unicode ( '>' )
39
+ }
26
40
} else {
27
- DecodedKey :: Unicode ( 'µ' )
41
+ if modifiers. is_altgr ( ) {
42
+ DecodedKey :: Unicode ( '≤' )
43
+ } else {
44
+ DecodedKey :: Unicode ( '<' )
45
+ }
28
46
}
29
47
}
30
48
KeyCode :: Key1 => {
@@ -35,6 +53,7 @@ impl KeyboardLayout for Azerty {
35
53
}
36
54
}
37
55
KeyCode :: Key2 => {
56
+ // NB: É can be done with AltGr + Shift
38
57
if modifiers. is_shifted ( ) {
39
58
DecodedKey :: Unicode ( '2' )
40
59
} else if modifiers. is_altgr ( ) {
@@ -53,6 +72,7 @@ impl KeyboardLayout for Azerty {
53
72
}
54
73
}
55
74
KeyCode :: Key4 => {
75
+ // NB: — (not -) can be done with AltGr + Shift, but is Unicode only
56
76
if modifiers. is_shifted ( ) {
57
77
DecodedKey :: Unicode ( '4' )
58
78
} else if modifiers. is_altgr ( ) {
@@ -62,6 +82,7 @@ impl KeyboardLayout for Azerty {
62
82
}
63
83
}
64
84
KeyCode :: Key5 => {
85
+ // NB: – (not -) can be done with AltGr + Shift, but is Unicode only
65
86
if modifiers. is_shifted ( ) {
66
87
DecodedKey :: Unicode ( '5' )
67
88
} else if modifiers. is_altgr ( ) {
@@ -71,6 +92,7 @@ impl KeyboardLayout for Azerty {
71
92
}
72
93
}
73
94
KeyCode :: Key6 => {
95
+ // NB: ‑ (not -) can be done with AltGr + Shift, but is Unicode only
74
96
if modifiers. is_shifted ( ) {
75
97
DecodedKey :: Unicode ( '6' )
76
98
} else if modifiers. is_altgr ( ) {
@@ -80,6 +102,7 @@ impl KeyboardLayout for Azerty {
80
102
}
81
103
}
82
104
KeyCode :: Key7 => {
105
+ // NB: È can be done with AltGr + Shift
83
106
if modifiers. is_shifted ( ) {
84
107
DecodedKey :: Unicode ( '7' )
85
108
} else if modifiers. is_altgr ( ) {
@@ -89,6 +112,7 @@ impl KeyboardLayout for Azerty {
89
112
}
90
113
}
91
114
KeyCode :: Key8 => {
115
+ // NB: ™ can be done with AltGr + Shift
92
116
if modifiers. is_shifted ( ) {
93
117
DecodedKey :: Unicode ( '8' )
94
118
} else if modifiers. is_altgr ( ) {
@@ -98,6 +122,7 @@ impl KeyboardLayout for Azerty {
98
122
}
99
123
}
100
124
KeyCode :: Key9 => {
125
+ // NB: Ç can be done with AltGr + Shift
101
126
if modifiers. is_shifted ( ) {
102
127
DecodedKey :: Unicode ( '9' )
103
128
} else if modifiers. is_altgr ( ) {
@@ -107,6 +132,7 @@ impl KeyboardLayout for Azerty {
107
132
}
108
133
}
109
134
KeyCode :: Key0 => {
135
+ // NB: À can be done with AltGr + Shift
110
136
if modifiers. is_shifted ( ) {
111
137
DecodedKey :: Unicode ( '0' )
112
138
} else if modifiers. is_altgr ( ) {
@@ -116,6 +142,7 @@ impl KeyboardLayout for Azerty {
116
142
}
117
143
}
118
144
KeyCode :: OemMinus => {
145
+ // NB: ≠ can be done with AltGr + Shift, but is Unicode only
119
146
if modifiers. is_shifted ( ) {
120
147
DecodedKey :: Unicode ( '°' )
121
148
} else if modifiers. is_altgr ( ) {
@@ -125,6 +152,7 @@ impl KeyboardLayout for Azerty {
125
152
}
126
153
}
127
154
KeyCode :: OemPlus => {
155
+ // NB: ± can be done with AltGr + Shift
128
156
if modifiers. is_shifted ( ) {
129
157
DecodedKey :: Unicode ( '+' )
130
158
} else if modifiers. is_altgr ( ) {
@@ -136,6 +164,7 @@ impl KeyboardLayout for Azerty {
136
164
KeyCode :: Backspace => DecodedKey :: Unicode ( 0x08 . into ( ) ) ,
137
165
KeyCode :: Tab => DecodedKey :: Unicode ( 0x09 . into ( ) ) ,
138
166
KeyCode :: Q => {
167
+ // NB: æ & Æ can be done with AltGr (+ Shift)
139
168
if map_to_unicode && modifiers. is_ctrl ( ) {
140
169
DecodedKey :: Unicode ( '\u{0001}' )
141
170
} else if modifiers. is_caps ( ) {
@@ -145,6 +174,7 @@ impl KeyboardLayout for Azerty {
145
174
}
146
175
}
147
176
KeyCode :: W => {
177
+ // NB: â &  can be done with AltGr (+ Shift), but no  in code page 437
148
178
if map_to_unicode && modifiers. is_ctrl ( ) {
149
179
DecodedKey :: Unicode ( '\u{001A}' )
150
180
} else if modifiers. is_caps ( ) {
@@ -154,6 +184,7 @@ impl KeyboardLayout for Azerty {
154
184
}
155
185
}
156
186
KeyCode :: E => {
187
+ // NB: € & ¢ can be done with AltGr (+ Shift), but not with code page 437
157
188
if map_to_unicode && modifiers. is_ctrl ( ) {
158
189
DecodedKey :: Unicode ( '\u{0005}' )
159
190
} else if modifiers. is_caps ( ) {
@@ -163,6 +194,7 @@ impl KeyboardLayout for Azerty {
163
194
}
164
195
}
165
196
KeyCode :: R => {
197
+ // NB: ê & Ê can be done with AltGr (+ Shift), but no Ê in code page 437
166
198
if map_to_unicode && modifiers. is_ctrl ( ) {
167
199
DecodedKey :: Unicode ( '\u{0012}' )
168
200
} else if modifiers. is_caps ( ) {
@@ -172,6 +204,7 @@ impl KeyboardLayout for Azerty {
172
204
}
173
205
}
174
206
KeyCode :: T => {
207
+ // NB: þ & Þ can be done with AltGr (+ Shift), but not with code page 437
175
208
if map_to_unicode && modifiers. is_ctrl ( ) {
176
209
DecodedKey :: Unicode ( '\u{0014}' )
177
210
} else if modifiers. is_caps ( ) {
@@ -181,6 +214,7 @@ impl KeyboardLayout for Azerty {
181
214
}
182
215
}
183
216
KeyCode :: Y => {
217
+ // NB: ÿ & Ÿ can be done with AltGr (+ Shift), but no Ÿ in code page 437
184
218
if map_to_unicode && modifiers. is_ctrl ( ) {
185
219
DecodedKey :: Unicode ( '\u{0019}' )
186
220
} else if modifiers. is_caps ( ) {
@@ -190,6 +224,7 @@ impl KeyboardLayout for Azerty {
190
224
}
191
225
}
192
226
KeyCode :: U => {
227
+ // NB: û & Û can be done with AltGr (+ Shift), but no Û in code page 437
193
228
if map_to_unicode && modifiers. is_ctrl ( ) {
194
229
DecodedKey :: Unicode ( '\u{0015}' )
195
230
} else if modifiers. is_caps ( ) {
@@ -199,6 +234,7 @@ impl KeyboardLayout for Azerty {
199
234
}
200
235
}
201
236
KeyCode :: I => {
237
+ // NB: î & Î can be done with AltGr (+ Shift), but no Î in code page 437
202
238
if map_to_unicode && modifiers. is_ctrl ( ) {
203
239
DecodedKey :: Unicode ( '\u{0009}' )
204
240
} else if modifiers. is_caps ( ) {
@@ -208,6 +244,7 @@ impl KeyboardLayout for Azerty {
208
244
}
209
245
}
210
246
KeyCode :: O => {
247
+ // NB: œ & Œ can be done with AltGr (+ Shift), but not with code page 437
211
248
if map_to_unicode && modifiers. is_ctrl ( ) {
212
249
DecodedKey :: Unicode ( '\u{000F}' )
213
250
} else if modifiers. is_caps ( ) {
@@ -217,6 +254,7 @@ impl KeyboardLayout for Azerty {
217
254
}
218
255
}
219
256
KeyCode :: P => {
257
+ // NB: ô & Ô can be done with AltGr (+ Shift), but no Ô in code page 437
220
258
if map_to_unicode && modifiers. is_ctrl ( ) {
221
259
DecodedKey :: Unicode ( '\u{0010}' )
222
260
} else if modifiers. is_caps ( ) {
@@ -235,6 +273,7 @@ impl KeyboardLayout for Azerty {
235
273
}
236
274
}
237
275
KeyCode :: Oem6 => {
276
+ // NB: ø & Ø can be done with AltGr (+ Shift), but not with code page 437
238
277
if modifiers. is_shifted ( ) {
239
278
DecodedKey :: Unicode ( '£' )
240
279
} else if modifiers. is_altgr ( ) {
@@ -251,6 +290,7 @@ impl KeyboardLayout for Azerty {
251
290
}
252
291
}
253
292
KeyCode :: A => {
293
+ // NB: ä & Ä can be done with AltGr (+ Shift)
254
294
if map_to_unicode && modifiers. is_ctrl ( ) {
255
295
DecodedKey :: Unicode ( '\u{0011}' )
256
296
} else if modifiers. is_caps ( ) {
@@ -260,6 +300,7 @@ impl KeyboardLayout for Azerty {
260
300
}
261
301
}
262
302
KeyCode :: S => {
303
+ // NB: ß & „ can be done with AltGr (+ Shift), but „ is Unicode only
263
304
if map_to_unicode && modifiers. is_ctrl ( ) {
264
305
DecodedKey :: Unicode ( '\u{0013}' )
265
306
} else if modifiers. is_caps ( ) {
@@ -269,6 +310,7 @@ impl KeyboardLayout for Azerty {
269
310
}
270
311
}
271
312
KeyCode :: D => {
313
+ // NB: ë & Ë can be done with AltGr (+ Shift), but no Ë in code page 437
272
314
if map_to_unicode && modifiers. is_ctrl ( ) {
273
315
DecodedKey :: Unicode ( '\u{0004}' )
274
316
} else if modifiers. is_caps ( ) {
@@ -278,6 +320,7 @@ impl KeyboardLayout for Azerty {
278
320
}
279
321
}
280
322
KeyCode :: F => {
323
+ // NB: ‘ & ‚ can be done with AltGr (+ Shift), but are Unicode only
281
324
if map_to_unicode && modifiers. is_ctrl ( ) {
282
325
DecodedKey :: Unicode ( '\u{0006}' )
283
326
} else if modifiers. is_caps ( ) {
@@ -287,6 +330,7 @@ impl KeyboardLayout for Azerty {
287
330
}
288
331
}
289
332
KeyCode :: G => {
333
+ // NB: ’ & ¥ can be done with AltGr (+ Shift), but no ’ in code page 437
290
334
if map_to_unicode && modifiers. is_ctrl ( ) {
291
335
DecodedKey :: Unicode ( '\u{0007}' )
292
336
} else if modifiers. is_caps ( ) {
@@ -296,6 +340,7 @@ impl KeyboardLayout for Azerty {
296
340
}
297
341
}
298
342
KeyCode :: H => {
343
+ // NB: ð & Ð can be done with AltGr (+ Shift), but not with code page 437
299
344
if map_to_unicode && modifiers. is_ctrl ( ) {
300
345
DecodedKey :: Unicode ( '\u{0008}' )
301
346
} else if modifiers. is_caps ( ) {
@@ -305,6 +350,7 @@ impl KeyboardLayout for Azerty {
305
350
}
306
351
}
307
352
KeyCode :: J => {
353
+ // NB: ü & Ü can be done with AltGr (+ Shift)
308
354
if map_to_unicode && modifiers. is_ctrl ( ) {
309
355
DecodedKey :: Unicode ( '\u{000A}' )
310
356
} else if modifiers. is_caps ( ) {
@@ -314,6 +360,7 @@ impl KeyboardLayout for Azerty {
314
360
}
315
361
}
316
362
KeyCode :: K => {
363
+ // NB: ï & Ï can be done with AltGr (+ Shift), but no Ï in code page 437
317
364
if map_to_unicode && modifiers. is_ctrl ( ) {
318
365
DecodedKey :: Unicode ( '\u{000B}' )
319
366
} else if modifiers. is_caps ( ) {
@@ -323,6 +370,7 @@ impl KeyboardLayout for Azerty {
323
370
}
324
371
}
325
372
KeyCode :: L => {
373
+ // NB: ŀ & Ŀ can be done with AltGr (+ Shift), but are Unicode only
326
374
if map_to_unicode && modifiers. is_ctrl ( ) {
327
375
DecodedKey :: Unicode ( '\u{000C}' )
328
376
} else if modifiers. is_caps ( ) {
@@ -332,6 +380,7 @@ impl KeyboardLayout for Azerty {
332
380
}
333
381
}
334
382
KeyCode :: Oem1 => {
383
+ // NB: ö & Ö can be done with AltGr (+ Shift)
335
384
if map_to_unicode && modifiers. is_ctrl ( ) {
336
385
DecodedKey :: Unicode ( '\u{000D}' )
337
386
} else if modifiers. is_caps ( ) {
@@ -350,6 +399,7 @@ impl KeyboardLayout for Azerty {
350
399
// Enter gives LF, not CRLF or CR
351
400
KeyCode :: Return => DecodedKey :: Unicode ( 10 . into ( ) ) ,
352
401
KeyCode :: Z => {
402
+ // NB: « & “ can be done with AltGr (+ Shift), but no “ in code page 437
353
403
if map_to_unicode && modifiers. is_ctrl ( ) {
354
404
DecodedKey :: Unicode ( '\u{0017}' )
355
405
} else if modifiers. is_caps ( ) {
@@ -359,6 +409,7 @@ impl KeyboardLayout for Azerty {
359
409
}
360
410
}
361
411
KeyCode :: X => {
412
+ // NB: » & ” can be done with AltGr (+ Shift), but no ” in code page 437
362
413
if map_to_unicode && modifiers. is_ctrl ( ) {
363
414
DecodedKey :: Unicode ( '\u{0018}' )
364
415
} else if modifiers. is_caps ( ) {
@@ -368,6 +419,7 @@ impl KeyboardLayout for Azerty {
368
419
}
369
420
}
370
421
KeyCode :: C => {
422
+ // NB: © & ® can be done with AltGr (+ Shift), but not with code page 437
371
423
if map_to_unicode && modifiers. is_ctrl ( ) {
372
424
DecodedKey :: Unicode ( '\u{0003}' )
373
425
} else if modifiers. is_caps ( ) {
@@ -377,6 +429,8 @@ impl KeyboardLayout for Azerty {
377
429
}
378
430
}
379
431
KeyCode :: V => {
432
+ // NB: ' ' & ← can be done with AltGr (+ Shift), but '' is Unicode NARROW UNBREAKABLE SPACE
433
+ // and ← is 0x1B with 437 and 850 code pages
380
434
if map_to_unicode && modifiers. is_ctrl ( ) {
381
435
DecodedKey :: Unicode ( '\u{0016}' )
382
436
} else if modifiers. is_caps ( ) {
@@ -386,6 +440,7 @@ impl KeyboardLayout for Azerty {
386
440
}
387
441
}
388
442
KeyCode :: B => {
443
+ // NB: ↓ & ↑ can be done with AltGr (+ Shift), but are 0x19 & 0x18 with 437 and 850 code pages
389
444
if map_to_unicode && modifiers. is_ctrl ( ) {
390
445
DecodedKey :: Unicode ( '\u{0002}' )
391
446
} else if modifiers. is_caps ( ) {
@@ -395,6 +450,7 @@ impl KeyboardLayout for Azerty {
395
450
}
396
451
}
397
452
KeyCode :: N => {
453
+ // NB: ¬ & → can be done with AltGr (+ Shift), but → is 0x1A with 437 and 850 code pages
398
454
if map_to_unicode && modifiers. is_ctrl ( ) {
399
455
DecodedKey :: Unicode ( '\u{000E}' )
400
456
} else if modifiers. is_caps ( ) {
@@ -404,27 +460,31 @@ impl KeyboardLayout for Azerty {
404
460
}
405
461
}
406
462
KeyCode :: M => {
463
+ // NB: ¿ & … can be done with AltGr (+ Shift), but no … in code page 437
407
464
if modifiers. is_caps ( ) {
408
465
DecodedKey :: Unicode ( '?' )
409
466
} else {
410
467
DecodedKey :: Unicode ( ',' )
411
468
}
412
469
}
413
470
KeyCode :: OemComma => {
471
+ // NB: × & ⋅ can be done with AltGr (+ Shift), but not with code page 437
414
472
if modifiers. is_shifted ( ) {
415
473
DecodedKey :: Unicode ( '.' )
416
474
} else {
417
475
DecodedKey :: Unicode ( ';' )
418
476
}
419
477
}
420
478
KeyCode :: OemPeriod => {
479
+ // NB: ÷ & ∕ can be done with AltGr (+ Shift), but ∕ is Unicode only
421
480
if modifiers. is_shifted ( ) {
422
481
DecodedKey :: Unicode ( '/' )
423
482
} else {
424
483
DecodedKey :: Unicode ( ':' )
425
484
}
426
485
}
427
486
KeyCode :: Oem2 => {
487
+ // NB: ¡ & − (not -) can be done with AltGr (+ Shift), but no − in code page 437
428
488
if modifiers. is_shifted ( ) {
429
489
DecodedKey :: Unicode ( '§' )
430
490
} else {
@@ -509,7 +569,6 @@ impl KeyboardLayout for Azerty {
509
569
}
510
570
}
511
571
KeyCode :: NumpadEnter => DecodedKey :: Unicode ( 10 . into ( ) ) ,
512
- KeyCode :: LShift => DecodedKey :: Unicode ( '<' ) ,
513
572
k => DecodedKey :: RawKey ( k) ,
514
573
}
515
574
}
0 commit comments