summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/app.rs5
-rw-r--r--src/config/keymap/template.rs26
-rw-r--r--src/widgets/luaeditor/mod.rs4
3 files changed, 25 insertions, 10 deletions
diff --git a/src/app.rs b/src/app.rs
index fec2135..87da612 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -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 => {