linenoise

Simple readline like functionality with nice hints feature.
README

Benefits

  1. BSD licensed.

  2. No system dependencies, no need for readline on your machine.

  3. Related to 2, these bindings are self-contained, the source for
    linenoise is in this repo and compiled all together with the
    OCaml.

  4. Written in OCaml.

  5. 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> "
Install
Published
05 May 2018
Maintainers
Sources
v1.1.0.tar.gz
md5=0d47ce859602ce719fd4372b79255d58
Dependencies
jbuilder
>= "1.0+beta7"
ocaml
< "4.09"
Reverse Dependencies
alba
>= "0.4.1"
beluga
>= "1.0"
links
>= "0.7"
ocamline
>= "1.2"
ogen
= "0.1.2" | >= "0.1.4"