aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.rs
diff options
context:
space:
mode:
authorTeddy Wing2018-10-03 12:42:00 +0200
committerTeddy Wing2018-10-03 12:42:00 +0200
commit52398f0c8507fdb5fe4a680bbbb841232b396ae7 (patch)
treec26b505bf055447dad60ed52cf2a6cd549d4bcec /src/parser.rs
parent7b040a5f3c8f66a2fd95bc1baccfa4fa2885425d (diff)
downloaddome-key-map-52398f0c8507fdb5fe4a680bbbb841232b396ae7.tar.bz2
run_key_action_for_mode(): Tap keys using `KeyboardKeyWithModifiers`
Use `autopilot::key::tap()` to simulate each key and modifier in an action. Originally tried to do this using a method that takes a closure to access the `KeyCodeConvertible` types inside `KeyboardKey`. Ended up with a much cleaner API solution that only requires a single method call.
Diffstat (limited to 'src/parser.rs')
-rw-r--r--src/parser.rs37
1 files changed, 35 insertions, 2 deletions
diff --git a/src/parser.rs b/src/parser.rs
index 9e11175..daea8fc 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -65,13 +65,35 @@ impl KeyCode {
}
#[derive(Debug, PartialEq)]
-enum KeyboardKey {
+pub enum KeyboardKey {
Character(Character),
KeyCode(KeyCode),
}
+impl KeyboardKey {
+ // fn map<K, F>(&self, f: F) -> &Self
+ // where
+ // K: KeyCodeConvertible,
+ // F: Fn(K),
+ // {
+ // match self {
+ // KeyboardKey::Character(c) => f(c.0),
+ // KeyboardKey::KeyCode(k) => f(k.0),
+ // }
+ //
+ // self
+ // }
+
+ // pub fn extract<K: KeyCodeConvertible + Copy>(&self) -> Box<K> {
+ // return match self {
+ // KeyboardKey::Character(c) => Box::new(c.0),
+ // KeyboardKey::KeyCode(k) => Box::new(k.0),
+ // }
+ // }
+}
+
#[derive(Debug, PartialEq)]
-struct KeyboardKeyWithModifiers {
+pub struct KeyboardKeyWithModifiers {
key: KeyboardKey,
flags: Vec<Flag>,
}
@@ -83,6 +105,17 @@ impl KeyboardKeyWithModifiers {
flags: modifiers,
}
}
+
+ pub fn tap(&self) {
+ match self.key {
+ KeyboardKey::Character(ref c) => {
+ autopilot::key::tap(c.0, &self.flags, 0)
+ },
+ KeyboardKey::KeyCode(ref k) => {
+ autopilot::key::tap(k.0, &self.flags, 0)
+ },
+ }
+ }
}
#[derive(Debug, PartialEq)]