in src/main.rs [244:296]
fn run_draw_loop<B: Backend>(terminal: &mut Terminal<B>, mut app: App) -> Result<()> {
loop {
terminal.draw(|f| ui(f, &mut app))?;
// wait up to 100ms for a keyboard event
if poll(Duration::from_millis(50))? {
if let Event::Key(key) = event::read()? {
match app.mode {
Mode::Table => match key.code {
KeyCode::Down | KeyCode::Char('j') => app.next_program(),
KeyCode::Up | KeyCode::Char('k') => app.previous_program(),
KeyCode::Enter => app.show_graphs(),
KeyCode::Char('f') => app.toggle_filter(),
KeyCode::Char('s') => app.toggle_sort(),
KeyCode::Char('q') | KeyCode::Esc => return Ok(()),
_ => {}
},
Mode::Graph => match key.code {
KeyCode::Enter | KeyCode::Esc => app.show_table(),
KeyCode::Char('q') => return Ok(()),
_ => {}
},
Mode::Filter => match key.code {
KeyCode::Enter | KeyCode::Esc => app.toggle_filter(),
_ => {
app.filter_input
.lock()
.unwrap()
.handle_event(&Event::Key(key));
}
},
Mode::Sort => match key.code {
KeyCode::Esc => app.toggle_sort(),
KeyCode::Up => app.sort_column(SortColumn::Ascending(
app.selected_column.unwrap_or_default(),
)),
KeyCode::Down => app.sort_column(SortColumn::Descending(
app.selected_column.unwrap_or_default(),
)),
KeyCode::Backspace => app.sort_column(SortColumn::NoOrder),
KeyCode::Left => app.previous_column(),
KeyCode::Right => app.next_column(),
KeyCode::Enter => app.cycle_sort_exit(),
_ => {}
},
}
if let (KeyModifiers::CONTROL, KeyCode::Char('c')) = (key.modifiers, key.code) {
return Ok(());
}
}
}
}
}