use crate::{
crossterm::event::{
Event, KeyCode, KeyEvent, KeyEventKind, KeyEventState, KeyModifiers, MouseEvent,
MouseEventKind,
},
preset, PromptSignal,
};
pub type Keymap = fn(
event: &Event,
renderer: &mut preset::tree::render::Renderer,
) -> anyhow::Result<PromptSignal>;
pub fn default(
event: &Event,
renderer: &mut preset::tree::render::Renderer,
) -> anyhow::Result<PromptSignal> {
let tree_after_mut = renderer.tree_snapshot.after_mut();
match event {
Event::Key(KeyEvent {
code: KeyCode::Enter,
modifiers: KeyModifiers::NONE,
kind: KeyEventKind::Press,
state: KeyEventState::NONE,
}) => return Ok(PromptSignal::Quit),
Event::Key(KeyEvent {
code: KeyCode::Char('c'),
modifiers: KeyModifiers::CONTROL,
kind: KeyEventKind::Press,
state: KeyEventState::NONE,
}) => return Err(anyhow::anyhow!("ctrl+c")),
Event::Key(KeyEvent {
code: KeyCode::Up,
modifiers: KeyModifiers::NONE,
kind: KeyEventKind::Press,
state: KeyEventState::NONE,
}) => {
tree_after_mut.tree.backward();
}
Event::Mouse(MouseEvent {
kind: MouseEventKind::ScrollUp,
column: _,
row: _,
modifiers: KeyModifiers::NONE,
}) => {
tree_after_mut.tree.backward();
}
Event::Key(KeyEvent {
code: KeyCode::Down,
modifiers: KeyModifiers::NONE,
kind: KeyEventKind::Press,
state: KeyEventState::NONE,
}) => {
tree_after_mut.tree.forward();
}
Event::Mouse(MouseEvent {
kind: MouseEventKind::ScrollDown,
column: _,
row: _,
modifiers: KeyModifiers::NONE,
}) => {
tree_after_mut.tree.forward();
}
Event::Key(KeyEvent {
code: KeyCode::Char(' '),
modifiers: KeyModifiers::NONE,
kind: KeyEventKind::Press,
state: KeyEventState::NONE,
}) => {
tree_after_mut.tree.toggle();
}
_ => (),
}
Ok(PromptSignal::Continue)
}