Deliver the unified View and Component model with retained Runtime, reactive scopes, Context, Behaviors, events, Actions, styles, Resources, Data, official UI Components, and Playground examples.\n\nVerification: make check and make load pass in the independent repository; sibling Ebox core tests pass 544/544. |
||
|---|---|---|
| docs | ||
| tests | ||
| .gitignore | ||
| etaf-actions.el | ||
| etaf-behavior.el | ||
| etaf-component.el | ||
| etaf-context.el | ||
| etaf-data.el | ||
| etaf-events.el | ||
| etaf-playground.el | ||
| etaf-reactive.el | ||
| etaf-renderer.el | ||
| etaf-resource.el | ||
| etaf-runtime.el | ||
| etaf-ui.el | ||
| etaf-view.el | ||
| etaf.el | ||
| Makefile | ||
| README.md | ||
| README.zh-CN.md | ||
ETAF
ETAF is a small text-application framework built above the independent Ebox layout and rendering engine.
Its complete public model is:
Component(props, Scope) → View → Renderer → Ebox Node → Emacs buffer
Every visible structure uses one form:
(name :property value ... child ...)
The only child computation bridge is expr :value; attribute values are ordinary Elisp expressions.
(etaf-view
(column
(text :face 'bold "Hello")
(text
:color "#687386"
(expr :value (if ready "Ready" "Waiting")))))
Define a Component:
(etaf-define-component status-label (&key label)
"Render a status label."
:view
(text :face 'bold (expr :value label)))
(etaf-mount
"*etaf-demo*"
(etaf-view (status-label :label "Connected")))
etaf-view is the single public View constructor. Structural forms do not use quote; quote remains ordinary Elisp data syntax, such as 'bold. A View returned from ordinary Elisp is explicitly constructed with (etaf-view ...) inside expr.
Documentation
Load and verify
During development, load the sibling Ebox checkout before ETAF:
(add-to-list 'load-path "/path/to/github/emacs-box")
(add-to-list 'load-path "/path/to/github/etaf")
(require 'etaf)
Run the complete local gate:
make check EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs
The gate byte-compiles the implementation, runs the core/Data/Resource/UI/Playground tests, and checks documentation/API boundaries. etaf-ui and etaf-playground are optional modules and are not loaded by the core facade.