diff options
| -rw-r--r-- | src/app.rs | 5 | ||||
| -rw-r--r-- | src/config/keymap/template.rs | 26 | ||||
| -rw-r--r-- | src/widgets/luaeditor/mod.rs | 4 |
3 files changed, 25 insertions, 10 deletions
@@ -85,10 +85,9 @@ impl App { fn handle_key_event(&mut self, event: KeyEvent) { let focus = { GlobalState::instance().active_window }; - let op = GlobalKeyMap::handle(event); + let populate = GlobalKeyMap::handle(event); - - if op.unwrap_or(true) { + if populate { match focus { Window::View => self.view.handle_key_event(event), Window::Editor => self.editor.handle_key_event(event), 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, ) { diff --git a/src/widgets/luaeditor/mod.rs b/src/widgets/luaeditor/mod.rs index 4fb8a3b..a24c6e7 100644 --- a/src/widgets/luaeditor/mod.rs +++ b/src/widgets/luaeditor/mod.rs @@ -34,9 +34,9 @@ impl LuaEditor { } pub fn handle_key_event(&mut self, event: KeyEvent) { - let r = EditorKeyMap::handle(event); + let populate = EditorKeyMap::handle(event); - if r.unwrap_or(true) { + if populate { match event.code { KeyCode::Char(c) => GlobalState::instance_mut().editor.buffer.insert(c), KeyCode::Backspace => { |