diff options
| author | Teddy Wing | 2018-10-03 23:49:05 +0200 |
|---|---|---|
| committer | Teddy Wing | 2018-10-03 23:52:49 +0200 |
| commit | 548074e8b3717b9ff55edd04eebc9fef59d5b6f0 (patch) | |
| tree | 1edc0f533b1b9b630110d94e4df5a0f2b8548717 /src | |
| parent | 9af4701e7364dac691ce8d2f2875a974091d5453 (diff) | |
| download | dome-key-map-548074e8b3717b9ff55edd04eebc9fef59d5b6f0.tar.bz2 | |
run_key_action_for_mode(): Extract action code to a new method
Move the key simulation and command execution code to a new method so
that it can be reused in both top-level map and mode branches.
This additionally enables command running from top-level maps
(previously it only worked for in-mode maps).
Diffstat (limited to 'src')
| -rw-r--r-- | src/cocoa_bridge.rs | 78 | ||||
| -rw-r--r-- | src/lib.rs | 2 |
2 files changed, 35 insertions, 45 deletions
diff --git a/src/cocoa_bridge.rs b/src/cocoa_bridge.rs index 65bc9a2..8d2f453 100644 --- a/src/cocoa_bridge.rs +++ b/src/cocoa_bridge.rs @@ -13,7 +13,7 @@ use libc::{c_char, size_t}; use stderrlog; use xdg; -use {Action, HeadphoneButton, MapGroup, MapKind}; +use {Action, HeadphoneButton, MapAction, MapGroup, MapKind}; #[repr(C)] struct renameMeMapGroup { @@ -228,34 +228,7 @@ mode <play><up> { } if let Some(map) = mode.get(trigger) { - match map.kind { - MapKind::Map => { - if let Action::Map(action) = &map.action { - for key in action { - key.tap() - } - } - }, - MapKind::Command => { - if let Action::String(action) = &map.action { - let shell = match env::var_os("SHELL") { - Some(s) => s, - None => OsString::from("/bin/sh"), - }; - - match Command::new(shell) - .arg("-c") - .arg(action) - .spawn() { - Ok(_) => (), - Err(e) => error!( - "Command failed to start: `{}'", - e - ), - } - } - }, - } + run_action(&map); } } } @@ -263,21 +236,7 @@ mode <play><up> { // TODO: make sure this doesn't run when in_mode if state.in_mode.is_none() { if let Some(map) = map { - match map.kind { - MapKind::Map => { - if let Action::Map(action) = &map.action { - for key in action { - key.tap() - } - } - }, - MapKind::Command => { - }, - // MapKind::Mode => { - // TODO: Maybe make a new type just for KeyActionResult that - // combines regular MapKinds and Mode - // }, - } + run_action(&map); } } @@ -302,6 +261,37 @@ mode <play><up> { } } +fn run_action(map_action: &MapAction) { + match map_action.kind { + MapKind::Map => { + if let Action::Map(action) = &map_action.action { + for key in action { + key.tap() + } + } + }, + MapKind::Command => { + if let Action::String(action) = &map_action.action { + let shell = match env::var_os("SHELL") { + Some(s) => s, + None => OsString::from("/bin/sh"), + }; + + match Command::new(shell) + .arg("-c") + .arg(action) + .spawn() { + Ok(_) => (), + Err(e) => error!( + "Command failed to start: `{}'", + e + ), + } + } + }, + } +} + // fn run_command(command: Action) -> Result { // } @@ -15,6 +15,6 @@ extern crate xdg; mod cocoa_bridge; mod parser; -use parser::{Action, HeadphoneButton, MapGroup, MapKind}; +use parser::{Action, HeadphoneButton, MapAction, MapGroup, MapKind}; pub use cocoa_bridge::*; |
