From 8a23af7f3f472ca8166dfd9b4c106ce518831e0e Mon Sep 17 00:00:00 2001 From: filipriec Date: Tue, 25 Feb 2025 16:07:01 +0100 Subject: [PATCH] working a and i commands perfectly well --- client/config.toml | 3 ++- client/src/config.rs | 17 +++++++++++++++-- client/src/ui/handlers/event.rs | 5 +++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/client/config.toml b/client/config.toml index 3a49065..c88cf18 100644 --- a/client/config.toml +++ b/client/config.toml @@ -4,7 +4,8 @@ save = [":w", "ctrl+s"] quit = [":q", "ctrl+q"] force_quit = [":q!", "ctrl+shift+q"] save_and_quit = [":wq", "ctrl+shift+s"] -enter_edit_mode = ["i", "ctrl+e", "a"] +enter_edit_mode_before = ["i"] +enter_edit_mode_after = ["a"] exit_edit_mode = ["esc", "ctrl+e"] previous_position = ["Left", "9"] next_position = ["Right", "8"] diff --git a/client/src/config.rs b/client/src/config.rs index 9d63fd8..8e1d1ed 100644 --- a/client/src/config.rs +++ b/client/src/config.rs @@ -92,14 +92,27 @@ impl Config { None } - pub fn is_enter_edit_mode(&self, key: KeyCode, modifiers: KeyModifiers) -> bool { - if let Some(bindings) = self.keybindings.get("enter_edit_mode") { + pub fn is_enter_edit_mode_before(&self, key: KeyCode, modifiers: KeyModifiers) -> bool { + if let Some(bindings) = self.keybindings.get("enter_edit_mode_before") { bindings.iter().any(|b| Self::matches_keybinding(b, key, modifiers)) } else { false } } + pub fn is_enter_edit_mode_after(&self, key: KeyCode, modifiers: KeyModifiers) -> bool { + if let Some(bindings) = self.keybindings.get("enter_edit_mode_after") { + bindings.iter().any(|b| Self::matches_keybinding(b, key, modifiers)) + } else { + false + } + } + + pub fn is_enter_edit_mode(&self, key: KeyCode, modifiers: KeyModifiers) -> bool { + self.is_enter_edit_mode_before(key, modifiers) || + self.is_enter_edit_mode_after(key, modifiers) + } + pub fn is_exit_edit_mode(&self, key: KeyCode, modifiers: KeyModifiers) -> bool { if let Some(bindings) = self.keybindings.get("exit_edit_mode") { bindings.iter().any(|b| Self::matches_keybinding(b, key, modifiers)) diff --git a/client/src/ui/handlers/event.rs b/client/src/ui/handlers/event.rs index 5e5fe6c..0c41adf 100644 --- a/client/src/ui/handlers/event.rs +++ b/client/src/ui/handlers/event.rs @@ -47,8 +47,9 @@ impl EventHandler { ) -> Result<(bool, String), Box> { if let Event::Key(key) = event { if !self.is_edit_mode && config.is_enter_edit_mode(key.code, key.modifiers) { - if key.code == KeyCode::Char('a') { - // Move cursor position one character to the right (after current character) + // Determine which type of edit mode we're entering + if config.is_enter_edit_mode_after(key.code, key.modifiers) { + // For 'a' (append) mode: Move cursor position one character to the right let current_input = form_state.get_current_input(); if !current_input.is_empty() && form_state.current_cursor_pos < current_input.len() { form_state.current_cursor_pos += 1;