MoonBit terminal event API backed by TerminalEvent C FFI
Dependencies
TerminalEvent C++ core -> TerminalEvent C ABI -> TerminalEvent MoonBit FFI -> LunarEvent -> LunarTUI adapter -> applicationmoon add FrozenLemonTee/LunarEventimport {
"FrozenLemonTee/LunarEvent@0.1.0",
}let backend = @LunarEvent.EventBackend::new()
match backend.enter_raw_mode() {
Ok(_) => {
match backend.poll_event(32) {
Some(event) => {
// Route the event into your application.
ignore(event)
}
None => ()
}
backend.restore_terminal()
}
Err(_) => ()
}
backend.shutdown()let source = @lunartui.EventSource::new()
match source.enter_raw_mode() {
Ok(_) => {
match source.poll_event(32) {
Some(event) => {
// event is a LunarTUI @base.Event
ignore(event)
}
None => ()
}
source.restore_terminal()
}
Err(_) => ()
}
source.shutdown()| LunarEvent | LunarTUI |
|---|---|
| Event::Key | @base.Event::key |
| Event::Resize | @base.Event::resize |
| Event::Paste | @base.Event::text_input |
| Event::Mouse | @base.Event::mouse |
| Event::Focus | @base.Event::focus |
| Event::Unknown | dropped by the adapter |
pub(all) enum Event {
Key(KeyEvent)
Resize(ResizeEvent)
Paste(String)
Mouse(MouseEvent)
Focus(FocusEvent)
Unknown(String)
} derive(Eq)pub struct EventBackend {
}pub(all) enum KeyCode {
Character
Enter
Escape
Backspace
Tab
Left
Right
Up
Down
Home
End
PageUp
PageDown
Insert
Delete
Function(Int)
Unknown
} derive(Eq)pub(all) struct MouseEvent {
button : MouseButton
action : MouseAction
x : Int
y : Int
modifiers : Modifiers
} derive(Eq)MoonBit terminal event API backed by TerminalEvent C FFI
Dependencies