use crate::*; impl Handle for Taggart { fn handle (&mut self, input: &TuiIn) -> Perhaps { Ok(match &*input.event() { Event::Key(KeyEvent { code: KeyCode::Up, kind: KeyEventKind::Press, modifiers: KeyModifiers::NONE, state: KeyEventState::NONE }) => { self.cursor = self.cursor.saturating_sub(1); None }, Event::Key(KeyEvent { code: KeyCode::Down, kind: KeyEventKind::Press, modifiers: KeyModifiers::NONE, state: KeyEventState::NONE }) => { self.cursor = self.cursor + 1; None }, Event::Key(KeyEvent { code: KeyCode::PageUp, kind: KeyEventKind::Press, modifiers: KeyModifiers::NONE, state: KeyEventState::NONE }) => { self.offset = self.offset.saturating_sub(5); None }, Event::Key(KeyEvent { code: KeyCode::PageDown, kind: KeyEventKind::Press, modifiers: KeyModifiers::NONE, state: KeyEventState::NONE }) => { self.offset += 5; None }, _ => None }) } } #[moku::state_machine] mod taggart { use moku::*; #[machine_module] mod machine {} use self::machine::{TaggartState, TopSuperstates}; struct Top; impl TopState for Top {} struct Tree(usize); #[superstate(Top)] impl State for Tree { fn enter (_: &mut TopSuperstates<'_>) -> StateEntry { StateEntry::State(Self(0)) } } struct File(usize); #[superstate(Top)] impl State for File { fn enter (_: &mut TopSuperstates<'_>) -> StateEntry { StateEntry::State(Self(0)) } } }