working a and i commands perfectly well
This commit is contained in:
@@ -4,7 +4,8 @@ save = [":w", "ctrl+s"]
|
|||||||
quit = [":q", "ctrl+q"]
|
quit = [":q", "ctrl+q"]
|
||||||
force_quit = [":q!", "ctrl+shift+q"]
|
force_quit = [":q!", "ctrl+shift+q"]
|
||||||
save_and_quit = [":wq", "ctrl+shift+s"]
|
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"]
|
exit_edit_mode = ["esc", "ctrl+e"]
|
||||||
previous_position = ["Left", "9"]
|
previous_position = ["Left", "9"]
|
||||||
next_position = ["Right", "8"]
|
next_position = ["Right", "8"]
|
||||||
|
|||||||
@@ -92,14 +92,27 @@ impl Config {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_enter_edit_mode(&self, key: KeyCode, modifiers: KeyModifiers) -> bool {
|
pub fn is_enter_edit_mode_before(&self, key: KeyCode, modifiers: KeyModifiers) -> bool {
|
||||||
if let Some(bindings) = self.keybindings.get("enter_edit_mode") {
|
if let Some(bindings) = self.keybindings.get("enter_edit_mode_before") {
|
||||||
bindings.iter().any(|b| Self::matches_keybinding(b, key, modifiers))
|
bindings.iter().any(|b| Self::matches_keybinding(b, key, modifiers))
|
||||||
} else {
|
} else {
|
||||||
false
|
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 {
|
pub fn is_exit_edit_mode(&self, key: KeyCode, modifiers: KeyModifiers) -> bool {
|
||||||
if let Some(bindings) = self.keybindings.get("exit_edit_mode") {
|
if let Some(bindings) = self.keybindings.get("exit_edit_mode") {
|
||||||
bindings.iter().any(|b| Self::matches_keybinding(b, key, modifiers))
|
bindings.iter().any(|b| Self::matches_keybinding(b, key, modifiers))
|
||||||
|
|||||||
@@ -47,8 +47,9 @@ impl EventHandler {
|
|||||||
) -> Result<(bool, String), Box<dyn std::error::Error>> {
|
) -> Result<(bool, String), Box<dyn std::error::Error>> {
|
||||||
if let Event::Key(key) = event {
|
if let Event::Key(key) = event {
|
||||||
if !self.is_edit_mode && config.is_enter_edit_mode(key.code, key.modifiers) {
|
if !self.is_edit_mode && config.is_enter_edit_mode(key.code, key.modifiers) {
|
||||||
if key.code == KeyCode::Char('a') {
|
// Determine which type of edit mode we're entering
|
||||||
// Move cursor position one character to the right (after current character)
|
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();
|
let current_input = form_state.get_current_input();
|
||||||
if !current_input.is_empty() && form_state.current_cursor_pos < current_input.len() {
|
if !current_input.is_empty() && form_state.current_cursor_pos < current_input.len() {
|
||||||
form_state.current_cursor_pos += 1;
|
form_state.current_cursor_pos += 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user