Files
cl-tty/README.org
Hermes 825980b93b v1.0.0: Complete framework
- README.org with overview, architecture, component table, quick start
- demo.lisp — working TUI demo exercising multiple components
- run-all-tests.lisp — single-script test runner
- ROADMAP updated with v1.0.0 documentation milestone
- Full test suite: ~280 checks, 100% passing across 9 suites
2026-05-11 20:47:47 +00:00

75 lines
2.6 KiB
Org Mode

# cl-tty — Terminal UI Framework for Common Lisp
Pure CL terminal UI framework. No ncurses, no FFI, no external dependencies.
```lisp
(ql:quickload :cl-tty)
```
## Quick start
```lisp
;; Create a modern terminal backend
(let ((backend (make-instance 'cl-tty.backend:modern-backend)))
(cl-tty.backend:initialize-backend backend)
;; Backend is ready — write text, draw boxes, handle input
(cl-tty.backend:shutdown-backend backend))
```
## Architecture
Two backends, one protocol:
- **modern-backend** — truecolor 24-bit, OSC 8 hyperlinks, DECICM sync,
SGR mouse, kitty keyboard, bold/italic/underline, box-drawing chars
- **simple-backend** — ASCII art, no color, universal compatibility
Everything is pure escape sequences (no curses, no terminfo, no FFI).
## Components
| Component | What it does | Version |
|-------------|------------------------------------------------------|---------|
| Box | Bordered container with background, title | v0.2.0 |
| Text | Styled text with word-wrap, spans | v0.2.0 |
| ScrollBox | Scrollable viewport with scrollbars | v0.6.0 |
| TabBar | Horizontal tab navigation | v0.6.0 |
| Select | Dropdown with fuzzy filter, category headers | v0.7.0 |
| TextInput | Single-line text input with readline keybindings | v0.5.0 |
| TextArea | Multi-line input with undo/redo, selection | v0.5.0 |
| Markdown | Renders markdown with syntax highlighting + diffs | v0.8.0 |
| Dialog | Modal overlays with stack management | v0.9.0 |
| Toast | Transient notifications (info/success/warning/error) | v0.9.0 |
| Mouse | Event handlers, hit-testing, text selection | v0.10.0 |
| Slot | Plugin system — named slots for extensible UI | v0.11.0 |
## Backend features
| Feature | modern | simple |
|-------------------|--------|--------|
| Truecolor (24-bit)| Yes | No |
| Bold/italic | Yes | No |
| OSC 8 hyperlinks | Yes | No |
| DECICM sync | Yes | No |
| SGR mouse | Yes | No |
| Kitty keyboard | Yes | No |
| Box drawing chars | Unicode| ASCII |
| Pipe-safe | No | Yes |
## Development
```bash
# Run all tests
sbcl --script run-all-tests.lisp
# Tangle org files
emacs --batch --eval "(progn (require 'org) (find-file \"org/FILE.org\") (org-babel-tangle) (kill-buffer))"
```
Literate programming: `.org` files in `org/` are the source of truth.
`.lisp` files are generated by tangling.
## License
TBD