package linenoise

  1. Overview
  2. Docs
Lightweight readline alternative

Install

Dune Dependency

Authors

Maintainers

Sources

v1.3.0.tar.gz
md5=867d1b62c2e6705c665f1e2e9199a6e0
sha512=c1f2d8aaf9ad72a24d9a3efdaef75e191975984517ddd9265c3fa76c8d3a7d51acf65cd6be0f35601d66dd1a9506799d9e803bb796170c03e02a94934283213e

Description

Published: 07 May 2019

README

Linenoise in OCaml

Build status"

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 + C.
  5. Pretty cool hints feature, see the gif.
  6. Additional features compared to linenoise, such as history search

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 (9)

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

Conflicts

None

OCaml

Innovation. Community. Security.