loom is a terminal text editor for SBCL with Emacs-style keybindings. It
combines raw-mode editing, window management, interactive PTY terminal sessions,
shell commands, Git status, diff, and staging commands, code-formatting integration,
auto-save, feature slices, and a bounded concurrent file-tree runtime.
With Nix and flakes enabled:
nix run github:nerima-lisp/loom -- path/to/file.lispOmit the path to start with the current directory as the file-tree root.
Use M-x terminal for a PTY-backed child process and M-x auto-save-mode to
enable sidecar auto-save for modified file-backed buffers.
Pin a reviewed commit when adding loom to another flake:
inputs.loom = {
url = "github:nerima-lisp/loom/<reviewed-commit>";
inputs.nixpkgs.follows = "nixpkgs";
};For a profile installation from the default branch, run nix profile install github:nerima-lisp/loom.
For release archives, follow the archive installation instructions. Archives include the Nix runtime closure and require Nix; they are not standalone executables.
The authoritative public export declarations are maintained in
src/package-exports.lisp. The current command catalogue is in
src/application/command-definitions.lisp,
and M-x lookup is implemented by
src/application/command-registry.lisp.
nix develop
nix build
nix develop -c loom-test
nix flake check --print-build-logs
nix fmt -- --ci
# Reproducible, bounded test run
nix develop -c timeout --signal=TERM --kill-after=15s 1200 loom-test
# Verification gates
LOOM_COVERAGE_DIR=/tmp/loom-coverage nix develop -c loom-coverage
nix run .#e2enix flake check --print-build-logs also runs the repository-wide paredit
syntax check, formatting check, build, documentation, test, and coverage
checks. Use the paredit command in the development shell for structural
inspection and edits when changing Lisp source.
The Nix check is the in-process gate. Sandbox3 may skip PTY-dependent checks
when no usable PTY is available; those skips do not cover PTY behavior.
nix run .#e2e is a separate PTY gate and must be run on a PTY-capable
environment.
Coverage can be promoted to a quality gate with optional percentage thresholds:
LOOM_COVERAGE_MIN_EXPRESSIONS=95 \
LOOM_COVERAGE_MIN_BRANCHES=92 \
LOOM_COVERAGE_DIR=/tmp/loom-coverage \
nix develop -c timeout --signal=TERM --kill-after=15s 1200 loom-coverageThresholds accept values from 0 to 100. The command fails when a configured threshold is not met, so the gate can be raised incrementally toward 100%.
The Nix coverage output is a report directory, not an executable. Build it
with nix build .#coverage (or run nix flake check); use the development
command above when the report should be written to a local directory. Inside
an interactive shell, test and coverage remain available as convenience
aliases; loom-test and loom-coverage are the portable executable commands.
The development guide covers the unit and integration suite, PTY checks, coverage, and the concurrency benchmark.
Please read the nerima-lisp contribution guide and the package standard.
Open an issue or consult the nerima-lisp support guide.
MIT. See LICENSE.