package lambda-term
Install
    
    dune-project
 Dependency
Authors
Maintainers
Sources
sha512=78648768644058337e22c79cf1fbb1a36472b24f11b1dc0461fc38419be6ec01b02d8d0ac45fed0bc99f91ba4c0f19d3bda113e834e064bee973b734527b9766
    
    
  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: 15 Aug 2023
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:
    $ dune build
$ dune installNote that this will build Lambda-Term using the development build profile which has strict compilation flags. If the build fails, try passing --profile=release to 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 @docYou can then consult it by openning _build/default/_doc/_html/index.html.
Tests (optional)
To build and execute tests:
$ dune runtestExamples (optional)
To build the examples:
$ dune build @examplesBinaries for the examples will be in _build/default/examples.
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
qYou can then send the result to jeremie@dimino.org, including:
- the application you are using as terminal emulator,
 - the contents of the 
TERMenvironment variable inside the terminal (echo $TERM), - the output of 
print_sequences.mlwith, for each line, the keystroke. 
Key bindings
Key bindings can be set in ~/.config/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-nextMain 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)
Dev Dependencies (1)
- 
  
    odoc
  
  
    
with-doc 
Used by (9)
- anthill
 - brisk-reconciler
 - cairn
 - 
  
    github-unix
  
  
    
>= "4.1.0" & < "4.3.2" - 
  
    ocp-browser
  
  
    
>= "1.3.5" - octez-smart-rollup-wasm-debugger-lib
 - prof_spacetime
 - 
  
    protocol-9p-tool
  
  
    
>= "2.0.2" - 
  
    utop
  
  
    
>= "2.10.0" 
Conflicts
None