working a and i commands perfectly well

This commit is contained in:
filipriec
2025-02-25 16:07:01 +01:00
parent 71b373d661
commit 8a23af7f3f
3 changed files with 20 additions and 5 deletions

View File

@@ -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"]

View File

@@ -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))

View File

@@ -47,8 +47,9 @@ impl EventHandler {
) -> Result<(bool, String), Box<dyn std::error::Error>> {
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;