refactor: Remove normal mode and make search the default

This commit is contained in:
Patrick Auernig 2024-11-28 16:06:31 +01:00
parent 38f2600281
commit 083c66aacb

View File

@ -21,17 +21,15 @@ enum Message {
SelectPrevious,
SelectNext,
Confirm,
Search,
SearchUpdate,
ExitSearch,
}
#[derive(Debug, Default)]
enum Mode {
#[default]
Normal,
Search,
Rename,
}
@ -88,6 +86,12 @@ pub fn run(projects: Projects) -> Result<()> {
ratatui::restore();
if let Some(selected_project) = state.selected_project {
// hacky stderr abuse
eprintln!(
"{}cd:{}",
env!("CARGO_BIN_NAME"),
selected_project.display()
);
write_selected_project_file(selected_project)?
}
@ -97,18 +101,13 @@ pub fn run(projects: Projects) -> Result<()> {
fn handle_key_event(state: &mut State, tx: &mut mpsc::Sender<Message>, event: KeyEvent) {
let msg = match (&state.mode, event.modifiers, event.code) {
(Mode::Normal, KeyModifiers::NONE, KeyCode::Char('q') | KeyCode::Esc) => Message::Exit,
(Mode::Normal, KeyModifiers::NONE, KeyCode::Char('k') | KeyCode::Up) => {
(Mode::Search, KeyModifiers::CONTROL, KeyCode::Char('k') | KeyCode::Up) => {
Message::SelectPrevious
}
(Mode::Normal, KeyModifiers::NONE, KeyCode::Char('j') | KeyCode::Down) => {
(Mode::Search, KeyModifiers::CONTROL, KeyCode::Char('j') | KeyCode::Down) => {
Message::SelectNext
}
(Mode::Normal, KeyModifiers::NONE, KeyCode::Char('/')) => Message::Search,
(Mode::Search, KeyModifiers::NONE, KeyCode::Esc) => Message::ExitSearch,
(Mode::Search, KeyModifiers::CONTROL, KeyCode::Char('k')) => Message::SelectPrevious,
(Mode::Search, KeyModifiers::CONTROL, KeyCode::Char('j')) => Message::SelectNext,
(Mode::Search, KeyModifiers::NONE, KeyCode::Esc) => Message::Exit,
(Mode::Search, KeyModifiers::NONE | KeyModifiers::SHIFT, KeyCode::Char(c)) => {
state.search.handle(InputRequest::InsertChar(c));
Message::SearchUpdate
@ -157,13 +156,6 @@ fn handle_messages(state: &mut State, rx: &mut mpsc::Receiver<Message>) -> Resul
};
}
}
Message::Search => {
state.mode = Mode::Search;
}
Message::ExitSearch => {
state.search = Input::default();
state.mode = Mode::Normal;
}
Message::SearchUpdate => {
state.project_table.select_first();
}
@ -179,12 +171,6 @@ fn draw(state: &mut State, frame: &mut Frame) {
frame.render_widget(&block, frame.area());
match state.mode {
Mode::Normal => {
let layout = Layout::vertical([Constraint::Fill(1)]);
let inner_area = block.inner(frame.area());
let layout_rects = layout.split(inner_area);
draw_list(state, frame, layout_rects[0]);
}
Mode::Search => {
let layout = Layout::vertical([Constraint::Fill(1), Constraint::Max(2)]);
let inner_area = block.inner(frame.area());
@ -192,6 +178,12 @@ fn draw(state: &mut State, frame: &mut Frame) {
draw_list(state, frame, layout_rects[0]);
draw_search(state, frame, layout_rects[1]);
}
Mode::Rename => {
let layout = Layout::vertical([Constraint::Fill(1)]);
let inner_area = block.inner(frame.area());
let layout_rects = layout.split(inner_area);
draw_list(state, frame, layout_rects[0]);
}
}
}