diff options
| author | Teddy Wing | 2018-10-03 12:42:00 +0200 | 
|---|---|---|
| committer | Teddy Wing | 2018-10-03 12:42:00 +0200 | 
| commit | 52398f0c8507fdb5fe4a680bbbb841232b396ae7 (patch) | |
| tree | c26b505bf055447dad60ed52cf2a6cd549d4bcec /src/parser.rs | |
| parent | 7b040a5f3c8f66a2fd95bc1baccfa4fa2885425d (diff) | |
| download | dome-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.rs | 37 | 
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)] | 
