diff --git a/crates/wayfarer/src/tui/events.rs b/crates/wayfarer/src/tui/events.rs index 2512002..2df8812 100644 --- a/crates/wayfarer/src/tui/events.rs +++ b/crates/wayfarer/src/tui/events.rs @@ -44,75 +44,72 @@ fn handle_keyboard_input( msg_tx: &mut mpsc::Sender, state: &mut State, ) -> Result<()> { - if key.modifiers.is_empty() { - match (key.code, &state.mode) { - (KeyCode::Esc, Mode::Insert) => msg_tx.send(Message::CancelEditEntry)?, - (KeyCode::Esc, _) => msg_tx.send(Message::SetMode(Mode::Normal))?, - (KeyCode::Enter, Mode::Edit) => msg_tx.send(Message::StartEditEntry)?, - (KeyCode::Enter, Mode::Insert) => msg_tx.send(Message::CommitEditEntry)?, - (KeyCode::Enter, Mode::SelectFile) => { - if state.prompt_save { - msg_tx.send(Message::SaveFile)?; - } else { - msg_tx.send(Message::LoadFile)?; - } + match (key.code, &state.mode) { + (KeyCode::Esc, Mode::Insert) => msg_tx.send(Message::CancelEditEntry)?, + (KeyCode::Esc, Mode::SelectFile) => { + if state.prompt_save { + msg_tx.send(Message::SetMode(Mode::Edit))?; + } else { + msg_tx.send(Message::SetMode(Mode::Normal))?; } - (KeyCode::Char('q'), Mode::Normal) => msg_tx.send(Message::Exit)?, - (KeyCode::Char('e'), Mode::Normal) => msg_tx.send(Message::SetMode(Mode::Edit))?, - - // file loading - (KeyCode::Char('o'), Mode::Normal) => { + } + (KeyCode::Esc, _) => msg_tx.send(Message::SetMode(Mode::Normal))?, + (KeyCode::Enter, Mode::Edit) => msg_tx.send(Message::StartEditEntry)?, + (KeyCode::Enter, Mode::Insert) => msg_tx.send(Message::CommitEditEntry)?, + (KeyCode::Enter, Mode::SelectFile) => { + if state.prompt_save { + msg_tx.send(Message::SaveFile)?; + } else { + msg_tx.send(Message::LoadFile)?; + } + } + (KeyCode::Char('q'), _) if key.modifiers == KeyModifiers::CONTROL => { + msg_tx.send(Message::Exit)? + } + (KeyCode::Char(ch), Mode::Normal) => match ch { + 'q' => msg_tx.send(Message::Exit)?, + 'e' => msg_tx.send(Message::SetMode(Mode::Edit))?, + 'o' => { state.prompt_save = false; state.file_select = Input::default(); msg_tx.send(Message::SetMode(Mode::SelectFile))? } - (KeyCode::Char('r'), Mode::Normal) => msg_tx.send(Message::ReloadFile)?, + 'r' => msg_tx.send(Message::ReloadFile)?, #[cfg(feature = "watch")] - (KeyCode::Char('w'), Mode::Normal) => msg_tx.send(Message::ToggleFileWatch)?, - + 'w' => msg_tx.send(Message::ToggleFileWatch)?, + _ => (), + }, + (KeyCode::Char(ch), Mode::Edit) => match ch { // movement inside editor section - (KeyCode::Char('h'), Mode::Edit) => msg_tx.send(Message::MoveCur(Direction::Left))?, - (KeyCode::Char('j'), Mode::Edit) => msg_tx.send(Message::MoveCur(Direction::Down))?, - (KeyCode::Char('k'), Mode::Edit) => msg_tx.send(Message::MoveCur(Direction::Up))?, - (KeyCode::Char('l'), Mode::Edit) => msg_tx.send(Message::MoveCur(Direction::Right))?, - + 'h' => msg_tx.send(Message::MoveCur(Direction::Left))?, + 'j' => msg_tx.send(Message::MoveCur(Direction::Down))?, + 'k' => msg_tx.send(Message::MoveCur(Direction::Up))?, + 'l' => msg_tx.send(Message::MoveCur(Direction::Right))?, // movement between editor sections - (KeyCode::Char('H'), Mode::Edit) => { - msg_tx.send(Message::MoveSection(Direction::Left))? - } - (KeyCode::Char('J'), Mode::Edit) => { - msg_tx.send(Message::MoveSection(Direction::Down))? - } - (KeyCode::Char('K'), Mode::Edit) => msg_tx.send(Message::MoveSection(Direction::Up))?, - (KeyCode::Char('L'), Mode::Edit) => { - msg_tx.send(Message::MoveSection(Direction::Right))? - } - + 'H' => msg_tx.send(Message::MoveSection(Direction::Left))?, + 'J' => msg_tx.send(Message::MoveSection(Direction::Down))?, + 'K' => msg_tx.send(Message::MoveSection(Direction::Up))?, + 'L' => msg_tx.send(Message::MoveSection(Direction::Right))?, // next/previous value selection - (KeyCode::Char('n'), Mode::Edit) => msg_tx.send(Message::NextEntryValue)?, - (KeyCode::Char('p'), Mode::Edit) => msg_tx.send(Message::PreviousEntryValue)?, - + 'n' => msg_tx.send(Message::NextEntryValue)?, + 'p' => msg_tx.send(Message::PreviousEntryValue)?, // open save prompt - (KeyCode::Char('s'), Mode::Edit) => { + 's' => { state.prompt_save = true; state.file_select = Input::default(); msg_tx.send(Message::SetMode(Mode::SelectFile))?; } - (_, Mode::Insert) => { - if let Some(input) = &mut state.edit_input { - input.handle_event(&Event::Key(key)); - } - } - (_, Mode::SelectFile) => { - state.file_select.handle_event(&Event::Key(key)); - } - _ => (), - }; - } else if key.modifiers.contains(KeyModifiers::CONTROL) { - match (key.code, &state.mode) { - (KeyCode::Char('q'), _) => msg_tx.send(Message::Exit)?, _ => (), + }, + (_, Mode::Insert) => { + if let Some(input) = &mut state.edit_input { + input.handle_event(&Event::Key(key)); + } } + (_, Mode::SelectFile) => { + state.file_select.handle_event(&Event::Key(key)); + } + _ => (), } state.clear_error_message();