package linenoise
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=0ae814442c7ac68b7989bc2b18bb7e426823ba85a386d0e304b58d285c3ec5af
md5=0d47ce859602ce719fd4372b79255d58
Description
These are self contained OCaml bindings to linenoise, no system libraries needed at all.
Here's a simple program:
let rec user_input prompt cb = match LNoise.linenoise prompt with | None -> () | Some v -> cb v; user_input prompt cb
let () = LNoise.set_hints_callback (fun line -> if line <> "git remote add " then None else Some (" ", LNoise.Yellow, true) ); LNoise.history_load ~filename:"history.txt" |> ignore; LNoise.history_set ~max_length:100 |> ignore; LNoise.set_completion_callback begin fun line_so_far ln_completions -> if line_so_far <> "" && line_so_far.[0] = 'h' then ["Hey"; "Howard"; "Hughes";"Hocus"] |> List.iter (LNoise.add_completion ln_completions); end; ["These are OCaml bindings to linenoise"; "get tab completion with , type h then hit "; "type quit to exit gracefully"; "By Edgar Aroutiounian\n"] |> List.iter print_endline; (fun from_user -> if from_user = "quit" then exit 0; LNoise.history_add from_user |> ignore; LNoise.history_save ~filename:"history.txt" |> ignore; Printf.sprintf "Got: %s" from_user |> print_endline ) |> user_input "test_program> "
and compile with: $ ocamlfind ocamlopt ex.ml -package linenoise -linkpkg -o T
Published: 05 May 2018
README
Linenoise in OCaml
Benefits
BSD licensed.
No system dependencies, no need for
readline
on your machine.Related to 2, these bindings are self-contained, the source for
linenoise
is in this repo and compiled all together with theOCaml
.Written in OCaml.
Pretty cool hints feature, see the gif.
Installation
It is easy with opam
$ opam install linenoise
See the pretty documentation here
Example code
This example is also included in the repo under examples:
let rec user_input prompt cb =
match LNoise.linenoise prompt with
| None -> ()
| Some v ->
cb v;
user_input prompt cb
let () =
(* LNoise.set_multiline true; *)
LNoise.set_hints_callback (fun line ->
if line <> "git remote add " then None
else Some (" <this is the remote name> <this is the remote URL>",
LNoise.Yellow,
true)
);
LNoise.history_load ~filename:"history.txt" |> ignore;
LNoise.history_set ~max_length:100 |> ignore;
LNoise.set_completion_callback begin fun line_so_far ln_completions ->
if line_so_far <> "" && line_so_far.[0] = 'h' then
["Hey"; "Howard"; "Hughes";"Hocus"]
|> List.iter (LNoise.add_completion ln_completions);
end;
["These are OCaml bindings to linenoise";
"get tab completion with <TAB>, type h then hit <TAB>";
"type quit to exit gracefully";
"By Edgar Aroutiounian\n"]
|> List.iter print_endline;
(fun from_user ->
if from_user = "quit" then exit 0;
LNoise.history_add from_user |> ignore;
LNoise.history_save ~filename:"history.txt" |> ignore;
Printf.sprintf "Got: %s" from_user |> print_endline
)
|> user_input "test_program> "