Skip to content

Commit 967781a

Browse files
committed
Print all keyboard types (except JIS)
Now keyboard layouts know their own physical layout.
1 parent c31f1ce commit 967781a

File tree

13 files changed

+174
-43
lines changed

13 files changed

+174
-43
lines changed

examples/print_keyboard.rs

Lines changed: 62 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,53 @@ use std::collections::HashMap;
44

55
use pc_keyboard::{DecodedKey, KeyCode, KeyboardLayout, Modifiers};
66

7-
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8-
enum KeyboardKind {
9-
Ansi,
10-
Iso,
11-
}
12-
137
fn main() {
148
println!("Keyboard Layouts");
159
println!("================");
1610
println!();
17-
println!("Us104Key:");
18-
show_kb(KeyboardKind::Ansi, &pc_keyboard::layouts::Us104Key);
19-
println!("Uk105Key:");
20-
show_kb(KeyboardKind::Iso, &pc_keyboard::layouts::Uk105Key);
21-
println!("Colemak:");
22-
show_kb(KeyboardKind::Ansi, &pc_keyboard::layouts::Colemak);
23-
println!("Azerty:");
24-
show_kb(KeyboardKind::Iso, &pc_keyboard::layouts::Azerty);
11+
println!("/// ****************************************");
12+
println!("/// # Azerty");
13+
println!("///");
14+
show_kb(&pc_keyboard::layouts::Azerty);
15+
println!("/// ****************************************");
16+
println!("/// # Colemak");
17+
println!("///");
18+
show_kb(&pc_keyboard::layouts::Colemak);
19+
println!("/// ****************************************");
20+
println!("/// # De105Key");
21+
println!("///");
22+
show_kb(&pc_keyboard::layouts::De105Key);
23+
println!("/// ****************************************");
24+
println!("/// # Dvorak104Key");
25+
println!("///");
26+
show_kb(&pc_keyboard::layouts::Dvorak104Key);
27+
println!("/// ****************************************");
28+
println!("/// # DVP104Key");
29+
println!("///");
30+
show_kb(&pc_keyboard::layouts::DVP104Key);
31+
println!("/// ****************************************");
32+
println!("/// # FiSe105Key");
33+
println!("///");
34+
show_kb(&pc_keyboard::layouts::FiSe105Key);
35+
// println!("/// ****************************************");
36+
// println!("/// # Jis109Key");
37+
// println!("///");
38+
// show_kb(&pc_keyboard::layouts::Jis109Key);
39+
println!("/// ****************************************");
40+
println!("/// # No105Key");
41+
println!("///");
42+
show_kb(&pc_keyboard::layouts::No105Key);
43+
println!("/// ****************************************");
44+
println!("/// # Uk105Key");
45+
println!("///");
46+
show_kb(&pc_keyboard::layouts::Uk105Key);
47+
println!("/// ****************************************");
48+
println!("/// # Us104Key");
49+
println!("///");
50+
show_kb(&pc_keyboard::layouts::Us104Key);
2551
}
2652

27-
fn show_kb(kind: KeyboardKind, layout: &dyn KeyboardLayout) {
53+
fn show_kb(layout: &dyn KeyboardLayout) {
2854
let mut modifiers = Modifiers {
2955
lshift: false,
3056
rshift: false,
@@ -37,37 +63,37 @@ fn show_kb(kind: KeyboardKind, layout: &dyn KeyboardLayout) {
3763
rctrl2: false,
3864
};
3965
println!("/// ## Unmodified");
40-
show_kb_modifiers(kind, layout, &modifiers);
66+
show_kb_modifiers(layout, &modifiers);
4167

4268
modifiers.capslock = true;
4369
println!("/// ## Caps Lock");
44-
show_kb_modifiers(kind, layout, &modifiers);
70+
show_kb_modifiers(layout, &modifiers);
4571
modifiers.capslock = false;
4672

4773
modifiers.lshift = true;
4874
println!("/// ## Shifted");
49-
show_kb_modifiers(kind, layout, &modifiers);
75+
show_kb_modifiers(layout, &modifiers);
5076
modifiers.lshift = false;
5177

5278
modifiers.rctrl = true;
5379
println!("/// ## Control");
54-
show_kb_modifiers(kind, layout, &modifiers);
80+
show_kb_modifiers(layout, &modifiers);
5581
modifiers.rctrl = false;
5682

5783
modifiers.ralt = true;
5884
println!("/// ## AltGr");
59-
show_kb_modifiers(kind, layout, &modifiers);
85+
show_kb_modifiers(layout, &modifiers);
6086
modifiers.ralt = false;
6187

6288
modifiers.ralt = true;
6389
modifiers.lshift = true;
6490
println!("/// ## Shift AltGr");
65-
show_kb_modifiers(kind, layout, &modifiers);
91+
show_kb_modifiers(layout, &modifiers);
6692
modifiers.ralt = false;
6793
modifiers.lshift = false;
6894
}
6995

70-
fn show_kb_modifiers(kind: KeyboardKind, layout: &dyn KeyboardLayout, modifiers: &Modifiers) {
96+
fn show_kb_modifiers(layout: &dyn KeyboardLayout, modifiers: &Modifiers) {
7197
let mut map = Map::new(modifiers);
7298
map.insert("esc", KeyCode::Escape, layout);
7399
map.insert("oem8", KeyCode::Oem8, layout);
@@ -138,11 +164,17 @@ fn show_kb_modifiers(kind: KeyboardKind, layout: &dyn KeyboardLayout, modifiers:
138164
map.insert("b", KeyCode::B, layout);
139165
map.insert("n", KeyCode::N, layout);
140166
map.insert("m", KeyCode::M, layout);
141-
if kind == KeyboardKind::Iso {
142-
map.insert("oem5", KeyCode::Oem5, layout);
143-
map.print_iso();
144-
} else {
145-
map.print_ansi();
167+
match layout.get_physical() {
168+
pc_keyboard::PhysicalKeyboard::Iso => {
169+
map.insert("oem5", KeyCode::Oem5, layout);
170+
map.print_iso();
171+
}
172+
pc_keyboard::PhysicalKeyboard::Ansi => {
173+
map.print_ansi();
174+
}
175+
pc_keyboard::PhysicalKeyboard::Jis => {
176+
todo!()
177+
}
146178
}
147179
}
148180

@@ -262,7 +294,7 @@ impl Map {
262294
/// └────┘ └────┴────┴────┴────┘ └────┴────┴────┴────┘ └────┴────┴────┴────┘ └────┴────┴────┘
263295
///
264296
/// ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬─────────┐ ┌────┬────┬────┐ ┌────┬────┬────┬────┐
265-
/// │{o8}│{k1}│{k2}│{k3}│{k4}│{k5}│{k6}│{k7}│{k8}│{k9}│{k0}│{om}│{ol}│{bs} │ │ │ │ │ │ │{nd}│{nm}│{ns}│
297+
/// │{o8}│{k1}│{k2}│{k3}│{k4}│{k5}│{k6}│{k7}│{k8}│{k9}│{k0}│{om}│{ol}│ {bs} │ │ │ │ │ │ │{nd}│{nm}│{ns}│
266298
/// ├────┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬────────┤ ├────┼────┼────┤ ├────┼────┼────┼────┤
267299
/// │{tb} │{kq}│{kw}│{ke}│{kr}│{kt}│{ky}│{ku}│{ki}│{ko}│{kp}│{o4}│{o6}│ {o7} │ │{de}│ │ │ │{n7}│{n8}│{n9}│ │
268300
/// ├─────┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴────────┤ └────┴────┴────┘ ├────┼────┼────┤{nl}│
@@ -358,9 +390,9 @@ impl Map {
358390
/// └────┘ └────┴────┴────┴────┘ └────┴────┴────┴────┘ └────┴────┴────┴────┘ └────┴────┴────┘
359391
///
360392
/// ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬─────────┐ ┌────┬────┬────┐ ┌────┬────┬────┬────┐
361-
/// │{o8}│{k1}│{k2}│{k3}│{k4}│{k5}│{k6}│{k7}│{k8}│{k9}│{k0}│{om}│{ol}│{bs} │ │ │ │ │ │ │{nd}│{nm}│{ns}│
393+
/// │{o8}│{k1}│{k2}│{k3}│{k4}│{k5}│{k6}│{k7}│{k8}│{k9}│{k0}│{om}│{ol}│ {bs} │ │ │ │ │ │ │{nd}│{nm}│{ns}│
362394
/// ├────┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬────────┤ ├────┼────┼────┤ ├────┼────┼────┼────┤
363-
/// │{tb} │{kq}│{kw}│{ke}│{kr}│{kt}│{ky}│{ku}│{ki}│{ko}│{kp}│{o4}│{o6}│ {en} │ │{de}│ │ │ │{n7}│{n8}│{n9}│ │
395+
/// │{tb} │{kq}│{kw}│{ke}│{kr}│{kt}│{ky}│{ku}│{ki}│{ko}│{kp}│{o4}│{o6}│ {en} │ │{de}│ │ │ │{n7}│{n8}│{n9}│ │
364396
/// ├─────┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┐ │ └────┴────┴────┘ ├────┼────┼────┤{nl}│
365397
/// │ │{ka}│{ks}│{kd}│{kf}│{kg}│{kh}│{kj}│{kk}│{kl}│{o1}│{o3}│{o7}│ │ │{n4}│{n5}│{n6}│ │
366398
/// ├────┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴────┴───────┤ ┌────┐ ├────┼────┼────┼────┤

src/layouts/azerty.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
//! French keyboard support
22
3-
use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers, QUO, SLS};
3+
use crate::{
4+
DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers, PhysicalKeyboard, QUO, SLS,
5+
};
46

57
/// A standard French 102-key (or 105-key including Windows keys) keyboard.
68
///
@@ -188,6 +190,10 @@ impl KeyboardLayout for Azerty {
188190
e => super::Us104Key.map_keycode(e, modifiers, handle_ctrl),
189191
}
190192
}
193+
194+
fn get_physical(&self) -> PhysicalKeyboard {
195+
PhysicalKeyboard::Iso
196+
}
191197
}
192198

193199
#[cfg(test)]

src/layouts/colemak.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Colemak keyboard support
22
3-
use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers};
3+
use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers, PhysicalKeyboard};
44

55
/// A Colemak 101-key (or 104-key including Windows keys) keyboard.
66
///
@@ -131,4 +131,8 @@ impl KeyboardLayout for Colemak {
131131
e => super::Us104Key.map_keycode(e, modifiers, handle_ctrl),
132132
}
133133
}
134+
135+
fn get_physical(&self) -> PhysicalKeyboard {
136+
PhysicalKeyboard::Ansi
137+
}
134138
}

src/layouts/de105.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! German keyboard support
22
3-
use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers};
3+
use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers, PhysicalKeyboard, QUO};
44

55
/// A standard German 102-key (or 105-key including Windows keys) keyboard.
66
///
@@ -251,4 +251,7 @@ impl KeyboardLayout for De105Key {
251251
}
252252
}
253253
}
254+
fn get_physical(&self) -> PhysicalKeyboard {
255+
PhysicalKeyboard::Iso
256+
}
254257
}

src/layouts/dvorak104.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Dvorak keyboard support
22
3-
use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers};
3+
use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers, PhysicalKeyboard};
44

55
/// A Dvorak 101-key (or 104-key including Windows keys) keyboard.
66
///
@@ -301,4 +301,8 @@ impl KeyboardLayout for Dvorak104Key {
301301
}
302302
}
303303
}
304+
305+
fn get_physical(&self) -> PhysicalKeyboard {
306+
PhysicalKeyboard::Ansi
307+
}
304308
}

src/layouts/dvorak_programmer104.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Dvorak Programmer keyboard support
22
3-
use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers};
3+
use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers, PhysicalKeyboard};
44

55
/// A Dvorak Programmer 101-key (or 104-key including Windows keys) keyboard.
66
///
@@ -482,4 +482,8 @@ impl KeyboardLayout for DVP104Key {
482482
k => DecodedKey::RawKey(k),
483483
}
484484
}
485+
486+
fn get_physical(&self) -> PhysicalKeyboard {
487+
PhysicalKeyboard::Ansi
488+
}
485489
}

src/layouts/fi_se105.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Finnish/Swedish keyboard support
22
3-
use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers};
3+
use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers, PhysicalKeyboard};
44

55
/// A standard Finnish/Swedish 102-key (or 105-key including Windows keys) keyboard.
66
///
@@ -223,4 +223,8 @@ impl KeyboardLayout for FiSe105Key {
223223
e => fallback.map_keycode(e, modifiers, handle_ctrl),
224224
}
225225
}
226+
227+
fn get_physical(&self) -> PhysicalKeyboard {
228+
PhysicalKeyboard::Iso
229+
}
226230
}

src/layouts/jis109.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! JIS keyboard support
22
3-
use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers};
3+
use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers, PhysicalKeyboard};
44

55
/// A standard Japan 106-key (or 109-key including Windows keys) keyboard.
66
///
@@ -175,4 +175,8 @@ impl KeyboardLayout for Jis109Key {
175175
}
176176
}
177177
}
178+
179+
fn get_physical(&self) -> PhysicalKeyboard {
180+
PhysicalKeyboard::Jis
181+
}
178182
}

src/layouts/mod.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
//! see [`Uk105Key`] and [`Us104Key`] as an example of that.
66
77
mod dvorak_programmer104;
8+
use crate::PhysicalKeyboard;
9+
810
pub use self::dvorak_programmer104::DVP104Key;
911

1012
mod dvorak104;
@@ -68,6 +70,21 @@ impl super::KeyboardLayout for AnyLayout {
6870
AnyLayout::FiSe105Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
6971
}
7072
}
73+
74+
fn get_physical(&self) -> PhysicalKeyboard {
75+
match self {
76+
AnyLayout::DVP104Key(inner) => inner.get_physical(),
77+
AnyLayout::Dvorak104Key(inner) => inner.get_physical(),
78+
AnyLayout::Us104Key(inner) => inner.get_physical(),
79+
AnyLayout::Uk105Key(inner) => inner.get_physical(),
80+
AnyLayout::Jis109Key(inner) => inner.get_physical(),
81+
AnyLayout::Azerty(inner) => inner.get_physical(),
82+
AnyLayout::Colemak(inner) => inner.get_physical(),
83+
AnyLayout::De105Key(inner) => inner.get_physical(),
84+
AnyLayout::No105Key(inner) => inner.get_physical(),
85+
AnyLayout::FiSe105Key(inner) => inner.get_physical(),
86+
}
87+
}
7188
}
7289

7390
impl super::KeyboardLayout for &AnyLayout {
@@ -90,6 +107,21 @@ impl super::KeyboardLayout for &AnyLayout {
90107
AnyLayout::FiSe105Key(inner) => inner.map_keycode(keycode, modifiers, handle_ctrl),
91108
}
92109
}
110+
111+
fn get_physical(&self) -> PhysicalKeyboard {
112+
match self {
113+
AnyLayout::DVP104Key(inner) => inner.get_physical(),
114+
AnyLayout::Dvorak104Key(inner) => inner.get_physical(),
115+
AnyLayout::Us104Key(inner) => inner.get_physical(),
116+
AnyLayout::Uk105Key(inner) => inner.get_physical(),
117+
AnyLayout::Jis109Key(inner) => inner.get_physical(),
118+
AnyLayout::Azerty(inner) => inner.get_physical(),
119+
AnyLayout::Colemak(inner) => inner.get_physical(),
120+
AnyLayout::De105Key(inner) => inner.get_physical(),
121+
AnyLayout::No105Key(inner) => inner.get_physical(),
122+
AnyLayout::FiSe105Key(inner) => inner.get_physical(),
123+
}
124+
}
93125
}
94126

95127
#[cfg(test)]

src/layouts/no105.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Norwegian keyboard support
22
3-
use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers};
3+
use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers, PhysicalKeyboard};
44

55
/// A standard Norwegian 102-key (or 105-key including Windows keys) keyboard.
66
///
@@ -229,4 +229,8 @@ impl KeyboardLayout for No105Key {
229229
}
230230
}
231231
}
232+
233+
fn get_physical(&self) -> PhysicalKeyboard {
234+
PhysicalKeyboard::Iso
235+
}
232236
}

0 commit comments

Comments
 (0)