package linenoise

  1. Overview
  2. Docs
Lightweight readline alternative

Install

Dune Dependency

Authors

Maintainers

Sources

v1.2.0.tar.gz
md5=02425012bdb9fed1ea3359bbac814a92
sha512=b006eedb1b44d00aded8db8b155215057fd7e8750feb2dc7f28a6f272c5cc24f9a8b9b802c0fa078a7976b2130bc2a1c97468e5cc5b5f67d98e51912e9641448

Description

Published: 08 Nov 2018

README

Linenoise in OCaml

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> "

Dependencies (3)

  1. result
  2. dune >= "1.1"
  3. ocaml < "4.09"

Dev Dependencies

None

Used by (8)

  1. alba >= "0.4.1"
  2. asli
  3. bap-analyze
  4. beluga = "1.0"
  5. links >= "0.7"
  6. ocamline >= "1.2"
  7. ogen = "0.1.2" | >= "0.1.4"
  8. sail

Conflicts

None