diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2024-08-03 12:51:23 +0200 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2024-08-03 12:51:23 +0200 |
| commit | f7c16781c0d68b8a20bc5d88d0040940459b903e (patch) | |
| tree | 9608515db54b6aaaf23175d24ace523e0c0c0bb5 /src/config | |
| parent | 4d4d72587185fb485fd6826514241680fc2d02ba (diff) | |
add default return value to keymap
Diffstat (limited to 'src/config')
| -rw-r--r-- | src/config/keymap/template.rs | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/config/keymap/template.rs b/src/config/keymap/template.rs index c5f21dc..5425eb8 100644 --- a/src/config/keymap/template.rs +++ b/src/config/keymap/template.rs @@ -4,26 +4,31 @@ macro_rules! KeyMapSections { #[derive(Debug, Default, Clone)] pub struct $name { store: KeyMapStore, + default_return: bool, } impl $name { pub const fn new() -> Self { Self { store: KeyMapStore::new(), + default_return: true, } } - pub fn handle(event: KeyEvent) -> Option<bool> { - let func = { GlobalConfig::instance_mut().keymap.$key.store.get(event) }; + pub fn handle(event: KeyEvent) -> bool { + let (def, func) = { + let mut config = GlobalConfig::instance_mut(); + (config.keymap.$key.default_return, config.keymap.$key.store.get(event)) + }; if let Some(func) = func { let func = func.lock().unwrap(); match func.run() { - Ok(value) => Some(value), - _ => None + Ok(value) => value, + _ => def } } else { - None + def } } @@ -37,6 +42,17 @@ macro_rules! KeyMapSections { } impl UserData for $name { + fn add_fields<'lua, M: mlua::prelude::LuaUserDataFields<'lua, Self>>(fields: &mut M) { + fields.add_field_function_get("default", |_, _| { + Ok(GlobalConfig::instance().keymap.$key.default_return) + }); + + fields.add_field_function_set("default", |_, _, def: bool| { + GlobalConfig::instance_mut().keymap.$key.default_return = def; + Ok(()) + }) + } + fn add_methods<'lua, M: mlua::prelude::LuaUserDataMethods<'lua, Self>>( methods: &mut M, ) { |