readline library for MoonBit
Dependencies
///|
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")
}///|
async fn repl_loop(
editor : @readline.LineEditor,
history : @readline.History,
) -> Unit {
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()})")
}
}
}
}
///|
async fn run_repl_example() -> Unit {
let history = @readline.History::new()
let editor = @readline.LineEditor::open(history~)
repl_loop(editor, history)
}///|
fn complete_command(context : @readline.CompletionContext) -> Array[String] {
["help", "history", "quit"].filter(command => {
command.has_prefix(context.current_word)
})
}
///|
async fn completion_example() -> Unit {
let editor = @readline.LineEditor::open()
editor.set_completer(complete_command)
editor.read_line(prompt=">> ") |> ignore
editor.clear_completer()
}///|
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)
CleanupFailed(Int)
Busy
Interrupted
} derive(Debug)pub(all) struct CompletionContext {
before_cursor : String
after_cursor : String
current_word : String
} 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")
}fn LineEditor::set_completer(self : LineEditor, completer : (CompletionContext) -> Array[String]) -> Unit raise ReadlineErrorpub 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
}Install
Download zipreadline library for MoonBit
Dependencies