package lambda-term

  1. Overview
  2. Docs
Terminal manipulation library for OCaml

Install

Dune Dependency

Authors

Maintainers

Sources

lambda-term-1.13.tbz
sha256=adf27e37cb52c9461c718a66f7589103a77eccbcefdd95317545c0e9aee01200
md5=c13826a97014d4d573b927b623c7e043

Description

Lambda-term is a cross-platform library for manipulating the terminal. It provides an abstraction for keys, mouse events, colors, as well as a set of widgets to write curses-like applications. The main objective of lambda-term is to provide a higher level functional interface to terminal manipulation than, for example, ncurses, by providing a native OCaml interface instead of bindings to a C library. Lambda-term integrates with zed to provide text edition facilities in console applications.

Published: 05 Jun 2018

README

Lambda-Term

Lambda-Term is a cross-platform library for manipulating the terminal. It provides an abstraction for keys, mouse events, colors, as well as a set of widgets to write curses-like applications.

The main objective of Lambda-Term is to provide a higher level functional interface to terminal manipulation than, for example, ncurses, by providing a native OCaml interface instead of bindings to a C library.

Lambda-Term integrates with zed to provide text edition facilities in console applications.

Installation

To build and install Lambda-Term:

$ make
$ make install

Documentation and manual pages (optional)

This part hasn't been ported to jbuilder yet

To build the documentation:

$ make doc

It will then be installed by make install.

Tests (optional)

To build and execute tests:

$ make test

Examples (optional)

To build examples:

$ make examples

Binaries for the examples will be in _build/default/examples.

To build the asciiart example:

$ make asciiart

Note that it requires the camlimages library.

Terminal emulators compatibility

All terminal emulators behave differently, especially regarding how keystrokes are reported to the application on its standard input. Lambda-Term tries to handle all of them, but it may happen that a particular key of combination of keys is not recognized by Lambda-Term, and thus does not produce the expected effect (for example: arrow keys or backspace not working).

To check what is reported by your terminal you can run the script print_sequences.ml which at the root of the repository:

$ ocaml print_sequences.ml
press 'q' to quit
\027[A
\027[D
\027[C
\027[A
\027[D
a
z
e
q

You can then send the result to jeremie@dimino.org, including:

  • the application you are using as terminal emulator,

  • the contents of the TERM environment variable inside the terminal (echo $TERM),

  • the output of print_sequences.ml with, for each line, the keystroke.

Key bindings

Key bindings can be set in ~/.lambda-term-inputrc. See lambda-term-inputrc. Useful mappings:

# This allows zsh-like searching the history by pressing up/down
[read-line]
up: history-search-prev
down: history-search-next

Main modules

  • LTerm: basic interface to the terminal, it allows to put the terminal in raw mode, hide the cursor, render an offscreen array of points, ...

  • LTerm_draw: drawing functions, for rendering in an offscreen array.

  • LTerm_read_line: line edition.

  • LTerm_inputrc: parsing of configurations files for key bindings.

  • LTerm_history: history and history file management.

  • LTerm_ui: helpers for writing full-screen applications.

  • LTerm_widget: widget system (not stable).

  • LTerm_resources: resources loading for widgets.

Dependencies (8)

  1. jbuilder >= "1.0+beta9"
  2. lwt_react
  3. camomile >= "0.8.6" & < "2.0.0"
  4. zed >= "1.2" & < "2.0"
  5. react
  6. lwt_log
  7. lwt >= "4.0.0"
  8. ocaml >= "4.02.3"

Dev Dependencies

None

Conflicts

None

OCaml

Innovation. Community. Security.