From 4cfef173ef1773551e1f101ed1e19857bd3d3a2f Mon Sep 17 00:00:00 2001 From: filipriec Date: Thu, 20 Feb 2025 13:15:46 +0100 Subject: [PATCH] working up down keys in the edit mode --- src/client/ui/handlers/event.rs | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/client/ui/handlers/event.rs b/src/client/ui/handlers/event.rs index 39d75b7..e2196a0 100644 --- a/src/client/ui/handlers/event.rs +++ b/src/client/ui/handlers/event.rs @@ -150,7 +150,12 @@ impl EventHandler { return Ok((false, "".to_string())); } "move_up" => { - form_state.current_field = form_state.current_field.saturating_sub(1); + if form_state.current_field == 0 { + // Wrap to the last field when at the top + form_state.current_field = form_state.fields.len() - 1; + } else { + form_state.current_field = form_state.current_field.saturating_sub(1); + } let current_input = form_state.get_current_input(); form_state.current_cursor_pos = form_state.current_cursor_pos.min(current_input.len()); return Ok((false, "".to_string())); @@ -333,7 +338,12 @@ impl EventHandler { } KeyCode::Tab => { if key.modifiers.contains(KeyModifiers::SHIFT) { - form_state.current_field = form_state.current_field.saturating_sub(1); + if form_state.current_field == 0 { + // Wrap to the last field when at the top + form_state.current_field = form_state.fields.len() - 1; + } else { + form_state.current_field = form_state.current_field.saturating_sub(1); + } } else { form_state.current_field = (form_state.current_field + 1) % form_state.fields.len(); } @@ -350,9 +360,23 @@ impl EventHandler { return Ok((false, self.command_message.clone())); } } - KeyCode::BackTab => form_state.current_field = form_state.current_field.saturating_sub(1), + KeyCode::BackTab => { + if form_state.current_field == 0 { + // Wrap to the last field when at the top + form_state.current_field = form_state.fields.len() - 1; + } else { + form_state.current_field = form_state.current_field.saturating_sub(1); + } + }, KeyCode::Down => form_state.current_field = (form_state.current_field + 1) % form_state.fields.len(), - KeyCode::Up => form_state.current_field = form_state.current_field.saturating_sub(1), + KeyCode::Up => { + if form_state.current_field == 0 { + // Wrap to the last field when at the top + form_state.current_field = form_state.fields.len() - 1; + } else { + form_state.current_field = form_state.current_field.saturating_sub(1); + } + }, KeyCode::Enter => form_state.current_field = (form_state.current_field + 1) % form_state.fields.len(), KeyCode::Char(c) => { match form_state.current_field {