diff --git a/src/config.rs b/src/config.rs index e6d4702..67bea7b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -137,6 +137,7 @@ fn parse_contents(contents: String) -> Result, Error> { ("return", evdev::Key::KEY_ENTER), ("enter", evdev::Key::KEY_ENTER), ("tab", evdev::Key::KEY_TAB), + ("space", evdev::Key::KEY_SPACE), ("minus", evdev::Key::KEY_MINUS), ("-", evdev::Key::KEY_MINUS), ("equal", evdev::Key::KEY_EQUAL), @@ -324,11 +325,15 @@ fn parse_keybind( mod_to_mod_enum: &HashMap<&str, Modifier>, ) -> Result<(evdev::Key, Vec), Error> { let line = line.split('#').next().unwrap(); - let tokens: Vec = line.split('+').map(|s| s.trim().to_lowercase()).collect(); + let tokens: Vec = + line.split('+').map(|s| s.trim().to_lowercase()).filter(|s| s != "_").collect(); let last_token = tokens.last().unwrap().trim(); // Check if each token is valid for token in &tokens { + if token == "_" { + continue; + } if key_to_evdev_key.contains_key(token.as_str()) { // Can't have a key that's like a modifier if token != last_token { @@ -1401,6 +1406,24 @@ ctals + b ], ) } + + #[test] + fn test_none() -> std::io::Result<()> { + let contents = " +super + {_, shift} + b + {firefox, brave}"; + eval_config_test( + contents, + vec![ + Hotkey::new(evdev::Key::KEY_B, vec![Modifier::Super], "firefox".to_string()), + Hotkey::new( + evdev::Key::KEY_B, + vec![Modifier::Super, Modifier::Shift], + "brave".to_string(), + ), + ], + ) + } } #[cfg(test)]