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.
To build and install Lambda-Term:
$ dune build $ dune install
Note that this will build Lambda-Term using the development build
profile which has strict compilation flags. If the build fails, try
dune or alternatively create a
dune-workspace file with the following contents:
(lang dune 1.1) (profile release)
HTML API Documentation (optional)
To build the documentation:
$ dune build @doc
You can then consult it by openning
To build and execute tests:
$ dune runtest
To build the examples:
$ dune build @examples
Binaries for the examples will be in
asciiart example is not built by default as it as an additional
dependency on the
camlimages library. To build it run:
$ dune build examples/asciiart/asciiart.exe
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 email@example.com, including:
- the application you are using as terminal emulator,
- the contents of the
TERMenvironment variable inside the terminal (
- the output of
print_sequences.mlwith, for each line, the keystroke.
Key bindings can be set in
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
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.