refactor: Remove normal mode and make search the default
This commit is contained in:
parent
38f2600281
commit
083c66aacb
40
src/tui.rs
40
src/tui.rs
@ -21,17 +21,15 @@ enum Message {
|
|||||||
SelectPrevious,
|
SelectPrevious,
|
||||||
SelectNext,
|
SelectNext,
|
||||||
Confirm,
|
Confirm,
|
||||||
Search,
|
|
||||||
SearchUpdate,
|
SearchUpdate,
|
||||||
ExitSearch,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
enum Mode {
|
enum Mode {
|
||||||
#[default]
|
#[default]
|
||||||
Normal,
|
|
||||||
Search,
|
Search,
|
||||||
|
Rename,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -88,6 +86,12 @@ pub fn run(projects: Projects) -> Result<()> {
|
|||||||
ratatui::restore();
|
ratatui::restore();
|
||||||
|
|
||||||
if let Some(selected_project) = state.selected_project {
|
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)?
|
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) {
|
fn handle_key_event(state: &mut State, tx: &mut mpsc::Sender<Message>, event: KeyEvent) {
|
||||||
let msg = match (&state.mode, event.modifiers, event.code) {
|
let msg = match (&state.mode, event.modifiers, event.code) {
|
||||||
(Mode::Normal, KeyModifiers::NONE, KeyCode::Char('q') | KeyCode::Esc) => Message::Exit,
|
(Mode::Search, KeyModifiers::CONTROL, KeyCode::Char('k') | KeyCode::Up) => {
|
||||||
(Mode::Normal, KeyModifiers::NONE, KeyCode::Char('k') | KeyCode::Up) => {
|
|
||||||
Message::SelectPrevious
|
Message::SelectPrevious
|
||||||
}
|
}
|
||||||
(Mode::Normal, KeyModifiers::NONE, KeyCode::Char('j') | KeyCode::Down) => {
|
(Mode::Search, KeyModifiers::CONTROL, KeyCode::Char('j') | KeyCode::Down) => {
|
||||||
Message::SelectNext
|
Message::SelectNext
|
||||||
}
|
}
|
||||||
(Mode::Normal, KeyModifiers::NONE, KeyCode::Char('/')) => Message::Search,
|
(Mode::Search, KeyModifiers::NONE, KeyCode::Esc) => Message::Exit,
|
||||||
|
|
||||||
(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 | KeyModifiers::SHIFT, KeyCode::Char(c)) => {
|
(Mode::Search, KeyModifiers::NONE | KeyModifiers::SHIFT, KeyCode::Char(c)) => {
|
||||||
state.search.handle(InputRequest::InsertChar(c));
|
state.search.handle(InputRequest::InsertChar(c));
|
||||||
Message::SearchUpdate
|
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 => {
|
Message::SearchUpdate => {
|
||||||
state.project_table.select_first();
|
state.project_table.select_first();
|
||||||
}
|
}
|
||||||
@ -179,12 +171,6 @@ fn draw(state: &mut State, frame: &mut Frame) {
|
|||||||
frame.render_widget(&block, frame.area());
|
frame.render_widget(&block, frame.area());
|
||||||
|
|
||||||
match state.mode {
|
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 => {
|
Mode::Search => {
|
||||||
let layout = Layout::vertical([Constraint::Fill(1), Constraint::Max(2)]);
|
let layout = Layout::vertical([Constraint::Fill(1), Constraint::Max(2)]);
|
||||||
let inner_area = block.inner(frame.area());
|
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_list(state, frame, layout_rects[0]);
|
||||||
draw_search(state, frame, layout_rects[1]);
|
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]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user