feat(tui): Handle key modifiers for input events
This commit is contained in:
parent
5da0795103
commit
efe950da64
26
src/tui.rs
26
src/tui.rs
@ -3,7 +3,7 @@ use std::sync::mpsc;
|
|||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use crossterm::event::{self, Event, KeyCode, KeyEvent};
|
use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyModifiers};
|
||||||
use ratatui::layout::{Constraint, Layout, Rect};
|
use ratatui::layout::{Constraint, Layout, Rect};
|
||||||
use ratatui::style::{Color, Style};
|
use ratatui::style::{Color, Style};
|
||||||
use ratatui::widgets::{Block, Borders, Cell, Paragraph, Row, Table, TableState};
|
use ratatui::widgets::{Block, Borders, Cell, Paragraph, Row, Table, TableState};
|
||||||
@ -84,7 +84,7 @@ pub fn run(projects: Projects) -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Event::Key(key_event) = event::read()? {
|
if let Event::Key(key_event) = event::read()? {
|
||||||
handle_event(&mut state, &mut msg_tx, key_event);
|
handle_key_event(&mut state, &mut msg_tx, key_event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,24 +98,26 @@ pub fn run(projects: Projects) -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn handle_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 (event.code, &state.mode) {
|
let msg = match (&state.mode, event.modifiers, event.code) {
|
||||||
(KeyCode::Char('q') | KeyCode::Esc, Mode::Normal) => Message::Exit,
|
(Mode::Normal, KeyModifiers::NONE, KeyCode::Char('q') | KeyCode::Esc) => Message::Exit,
|
||||||
(KeyCode::Char('j') | KeyCode::Down, Mode::Normal) => Message::MoveDown,
|
(Mode::Normal, KeyModifiers::NONE, KeyCode::Char('j') | KeyCode::Down) => Message::MoveDown,
|
||||||
(KeyCode::Char('k') | KeyCode::Up, Mode::Normal) => Message::MoveUp,
|
(Mode::Normal, KeyModifiers::NONE, KeyCode::Char('k') | KeyCode::Up) => Message::MoveUp,
|
||||||
(KeyCode::Char('/'), Mode::Normal) => Message::Search,
|
(Mode::Normal, KeyModifiers::NONE, KeyCode::Char('/')) => Message::Search,
|
||||||
|
|
||||||
(KeyCode::Esc, Mode::Search) => Message::ExitSearch,
|
(Mode::Search, KeyModifiers::NONE, KeyCode::Esc) => Message::ExitSearch,
|
||||||
(KeyCode::Char(c), Mode::Search) => {
|
(Mode::Search, KeyModifiers::CONTROL, KeyCode::Char('j')) => Message::MoveDown,
|
||||||
|
(Mode::Search, KeyModifiers::CONTROL, KeyCode::Char('k')) => Message::MoveUp,
|
||||||
|
(Mode::Search, KeyModifiers::NONE, KeyCode::Char(c)) => {
|
||||||
state.search.handle(InputRequest::InsertChar(c));
|
state.search.handle(InputRequest::InsertChar(c));
|
||||||
Message::SearchUpdate
|
Message::SearchUpdate
|
||||||
}
|
}
|
||||||
(KeyCode::Backspace, Mode::Search) => {
|
(Mode::Search, KeyModifiers::NONE, KeyCode::Backspace) => {
|
||||||
state.search.handle(InputRequest::DeletePrevChar);
|
state.search.handle(InputRequest::DeletePrevChar);
|
||||||
Message::SearchUpdate
|
Message::SearchUpdate
|
||||||
}
|
}
|
||||||
|
|
||||||
(KeyCode::Enter, _) => Message::Confirm,
|
(_, _, KeyCode::Enter) => Message::Confirm,
|
||||||
|
|
||||||
_ => Message::Noop,
|
_ => Message::Noop,
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user