notty

Declaring terminals
README




Notty is a declarative terminal library for OCaml structured around a notion
of composable images. It tries to abstract away the basic terminal programming
model, providing something simpler and more expressive.

The core layout engine and IO codecs are pure platform-independent OCaml.
Distribution includes modules with input and output facilities for Unix, and Lwt
on Unix.

As an attempt to redefine terminal programming, Notty has to be
opinionated. It assumes Unicode throughout, does not have universal support
for various terminals out there, and has a peculiar programming and rendering
model.

Notty's core API was heavily influenced by Haskell's Vty.

Where to start

Check out the documentation, examples, or peek directly into the interface
file.

Building with dune build @ex will produce several little example programs that
also double as tests.

(* Game of Life with ZX Spectrum kitsch. *)

let dot : image = I.uchar A.(fg lightred) (Uchar.of_int 0x25cf) 1 1

let background step (n, m) =
  let k = 24. *. sin (float (step + m + n) /. 10.) |> truncate in
  if k > 0 then I.char A.(fg (gray k)) '.' 1 1 else I.void 1 1

let render (w, h) step life : image =
  I.tabulate w (h - 1) @@ fun x y ->
    let pt = (x, y) in
    if CSet.mem pt life then dot else background step pt

What?

  • Notty?

    Terminals are tedious to program for. Notty tries to abstract the tedium away,
    leaving you with a more pleasant programming surface that's quite unlike a TTY.
    Hence, No-TTY.

  • A new kind of Rust terminal?

    This Notty has no connection to any other body of code named Notty.

  • Why make yet another terminal output library?

    Because:

    • It allows one to describe what should be seen, as opposed to commanding
      a terminal.

    • It's pretty compact. Both bells and whistles can be implemented separately.

    • Core is easy to glue onto various IO backends.

    • Pure platform-independent OCaml.

Install
Published
02 Sep 2022
Sources
notty-0.2.3.tbz
sha256=74659fb14073db4438989891ab24f24bef81aa497dac16d9a67f9a1c9c200824
sha512=6e21d44fe39f3d80884b87635bebae55cb2b931ef74f9184ba4d74cc3e51cb0b3e976c3b6dc61d377288504e8bfabe21acdc1069eacb30df1fbf6686b80f7c6b
Dependencies
uutf
>= "1.0.0"
cppo
build & >= "1.1.0"
dune
>= "1.7"
ocaml
>= "4.08.0"
Reverse Dependencies