readline library for MoonBit
///|
test {
let config = @readline.LineEditorConfig::new(
application_name="example-repl",
editing_mode=@readline.Emacs,
editrc=@readline.Disabled,
)
let history = @readline.History::new(capacity=100)
history.add("help")
let editor = @readline.LineEditor::open(config~, history~)
inspect(editor.history().length(), content="1")
}///|
fn repl_loop(
editor : @readline.LineEditor,
history : @readline.History,
) -> Unit raise @readline.ReadlineError {
for ;; {
let input = editor.read_line(prompt=">> ") catch {
@readline.Interrupted => continue
error => raise error
}
match input {
None => break
Some(line) => {
history.add(line)
println("\{line} (\{history.length()})")
}
}
}
}
///|
fn run_repl_example() -> Unit raise @readline.ReadlineError {
let history = @readline.History::new()
let editor = @readline.LineEditor::open(history~)
repl_loop(editor, history)
}///|
fn persist_history() -> Unit raise @readline.ReadlineError {
let history = @readline.History::new(capacity=1000)
history.add("help")
history.save("session.history")
let restored = @readline.History::load("session.history", capacity=1000)
println(restored.length())
}$MOON_HOME/cache/lib/Kaida-Amethyst/readline.mbt/...pub(all) suberror ReadlineError {
EmbeddedNul
UnsupportedLocale
InitializationFailed
ConfigurationFailed
InvalidHistoryCapacity(Int)
HistoryUpdateFailed
HistoryLoadFailed(String, Int?)
HistorySaveFailed(String, Int?)
InvalidUtf8
ReadFailed(Int)
Busy
Interrupted
} derive(Debug)pub struct History {
// private fields
}test {
let history = History::new(capacity=100)
inspect(history.length(), content="0")
}pub struct LineEditor {
// private fields
}fn LineEditor::open(config? : LineEditorConfig, history? : History) -> LineEditor raise ReadlineErrortest {
let config = LineEditorConfig::new(editrc=Disabled)
let history = History::new(capacity=100)
let editor = LineEditor::open(config~, history~)
inspect(editor.history().length(), content="0")
}let editor = LineEditor::open()
match editor.read_line(prompt=">> ") {
Some(line) => println(line)
None => println("EOF")
}pub struct LineEditorConfig {
// private fields
}fn LineEditorConfig::new(application_name? : StringView, editing_mode? : EditingMode, editrc? : Editrc) -> LineEditorConfigtest {
let config = LineEditorConfig::new(
application_name="example-repl",
editing_mode=Vi,
editrc=Disabled,
)
config |> ignore
}readline library for MoonBit