Rabbita-friendly xterm.js bindings for MoonBit
Dependencies
moon build --target js --release examples/webpython3 -m http.server 8765 --bind 127.0.0.1http://127.0.0.1:8765/examples/web/https://moonbit-community.github.io/rabbita_xterm/priv struct Model {
xterm : @xterm.State
}
priv enum Msg {
Xterm(@xterm.Action)
XtermEvent(@xterm.Event)
}
fn initial_model() -> Model {
{
xterm: @xterm.new(
cols=80,
rows=24,
background="#101418",
foreground="#dce4ea",
),
}
}
fn update(
dispatch : @cmd.Dispatch[Msg],
msg : Msg,
model : Model,
) -> (@cmd.Cmd, Model) {
match msg {
Xterm(action) => {
let (cmd, xterm) = @xterm.update(action, model.xterm, event => {
dispatch(XtermEvent(event))
})
(cmd, { ..model, xterm, })
}
XtermEvent(Ready) =>
(dispatch(Xterm(@xterm.write(@utf8.encode("ready\\r\\n")))), model)
XtermEvent(_) => (@cmd.none, model)
}
}
fn view(_dispatch : @cmd.Dispatch[Msg], model : Model) -> @html.Html {
model.xterm.view(class="terminal-host")
}
fn subscriptions(dispatch : @cmd.Dispatch[Msg], model : Model) -> @sub.Sub {
@xterm.subscriptions(model.xterm, action => dispatch(Xterm(action)))
}xterm.mbt managed Rabbita API
js/xterm.mbt xterm.js FFI wrapper
js/listen.mbt lower-level subscriptions and parser hooks
addon/fit/fit.mbt @xterm/addon-fit wrapper
examples/web/ asciicast player demomoon check
moon fmt
moon infomoon build --target js --release examples/webtype Actionpub enum Event {
Ready
Data(String)
Resized(Size)
TitleChanged(String)
LoadFailed(String)
FitFailed(String)
}type Statefn new(use_fit? : Bool, background? : String, foreground? : String, cursor_blink? : Bool, font_size? : Int, cols? : Int, rows? : Int, mac_option_is_meta? : Bool, scrollback? : Int, title? : String) -> Statelet (cmd, xterm) = @xterm.update(action, model.xterm, event => dispatch(XtermEvent(event)))Rabbita-friendly xterm.js bindings for MoonBit
Dependencies