diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ffi.rs | 15 | ||||
| -rw-r--r-- | src/parser.rs | 52 | 
2 files changed, 61 insertions, 6 deletions
| @@ -50,13 +50,13 @@ pub extern "C" fn dome_key_state_free(ptr: *mut State) {  pub extern "C" fn dome_key_state_load_map_group(ptr: *mut State) {      match xdg::BaseDirectories::with_prefix("dome-key") {          Ok(xdg_dirs) => { +            let state = unsafe { +                assert!(!ptr.is_null()); +                &mut *ptr +            }; +              match xdg_dirs.find_config_file("mappings.dkmap") {                  Some(mapping_file) => { -                    let state = unsafe { -                        assert!(!ptr.is_null()); -                        &mut *ptr -                    }; -                      let dkmap = fs::read_to_string(mapping_file)                          .expect("Failed to read 'mappings.dkmap'"); @@ -67,10 +67,13 @@ pub extern "C" fn dome_key_state_load_map_group(ptr: *mut State) {                      state.map_group = Some(map_group);                  },                  None => { +                    state.map_group = Some(MapGroup::default()); +                      match xdg_dirs.get_config_home().to_str() {                          Some(config_home) => {                              error!( -                                "No mapping file found at '{}{}'", +                                "No mapping file found at '{}{}'. +                                Using default mappings.",                                  config_home,                                  "mappings.dkmap"                              ) diff --git a/src/parser.rs b/src/parser.rs index fe56fca..8314e0d 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -203,6 +203,58 @@ impl MapGroup {      }  } +/// Default headphone button mappings: +/// +/// * Up → Volume up +/// * Middle → Play +/// * Down → Volume down +impl Default for MapGroup { +    fn default() -> Self { +        let mut default_maps: MapCollection = HashMap::new(); +        default_maps.insert( +            vec![HeadphoneButton::Up], +            MapAction { +                action: Action::Map( +                    vec![KeyboardKeyWithModifiers::new( +                        KeyboardKey::NXKey(key_code::NX_KEYTYPE_SOUND_UP), +                        vec![], +                    )] +                ), +                kind: MapKind::Map, +            }, +        ); +        default_maps.insert( +            vec![HeadphoneButton::Play], +            MapAction { +                action: Action::Map( +                    vec![KeyboardKeyWithModifiers::new( +                        KeyboardKey::NXKey(key_code::NX_KEYTYPE_PLAY), +                        vec![], +                    )] +                ), +                kind: MapKind::Map, +            }, +        ); +        default_maps.insert( +            vec![HeadphoneButton::Down], +            MapAction { +                action: Action::Map( +                    vec![KeyboardKeyWithModifiers::new( +                        KeyboardKey::NXKey(key_code::NX_KEYTYPE_SOUND_DOWN), +                        vec![], +                    )] +                ), +                kind: MapKind::Map, +            }, +        ); + +        MapGroup { +            maps: default_maps, +            modes: HashMap::new(), +        } +    } +} +  fn string_case_insensitive<I>(      s: &'static str | 
