No description
  • Emacs Lisp 94%
  • Python 5.7%
  • Makefile 0.3%
Find a file
Kinneyzhang 6476ea3230
Some checks failed
Repository structure / structure (push) Has been cancelled
perf(desktop): retain Settings controls across tab changes
Keep the Settings shell, tab actions and footer callbacks mounted while the
active field grid changes. Height, selection and guidance update through their
own bindings, and callbacks read the current controller.

Cover all sections, current values on reopen, reset, and Done/Escape focus
restoration through the public interfaces.

Validation: make check passes (88 public scenarios and 70 API declarations).
The real-config six-app GUI passes all 49 actions. Three foreground sample sets
reduce tab p95 from 511 to 352 ms and maximum from 566 to 380 ms; the absolute
10 ms interaction budget remains unmet.
2026-09-29 20:15:24 +08:00
.githooks feat: add ETAF desktop manager application 2026-09-21 13:54:14 +08:00
.github/workflows feat: add ETAF desktop manager application 2026-09-21 13:54:14 +08:00
benchmarks test(desktop): measure native interactions in the real demo 2026-09-29 01:49:48 +08:00
docs perf(desktop): retain Settings controls across tab changes 2026-09-29 20:15:24 +08:00
examples fix(demo): keep application controls visible while scrolling 2026-09-29 01:45:32 +08:00
lisp perf(desktop): retain Settings controls across tab changes 2026-09-29 20:15:24 +08:00
scripts fix(scripts): check secondary jj workspaces 2026-09-25 16:52:15 +08:00
tests perf(desktop): retain Settings controls across tab changes 2026-09-29 20:15:24 +08:00
.editorconfig feat: add ETAF desktop manager application 2026-09-21 13:54:14 +08:00
.gitignore feat: add ETAF desktop manager application 2026-09-21 13:54:14 +08:00
CHANGELOG.md perf(desktop): retain Settings controls across tab changes 2026-09-29 20:15:24 +08:00
etaf-desktop.el fix(desktop): inherit Emacs font sizes by default 2026-09-29 01:45:22 +08:00
Makefile feat(desktop): add a standalone demo desktop with sample applications 2026-09-26 10:35:37 +08:00
README.md test(desktop): measure native interactions in the real demo 2026-09-29 01:49:48 +08:00

ETAF Desktop

ETAF Desktop is an application-level desktop manager built on ETAF and ETAF UI. It owns windows, workspaces, focus order, z-order, geometry policy and the normal/minimized/maximized lifecycle. Ebox remains the retained layout and incremental publication provider; ETAF UI's etaf-window is the controlled presentation shell.

Minimal example

(add-to-list 'load-path "/path/to/etaf")
(add-to-list 'load-path "/path/to/etaf-ui")
(add-to-list 'load-path "/path/to/etaf-desktop")
(require 'etaf-desktop)
(let ((desktop (etaf-desktop-open)))
  (etaf-desktop-open-window desktop 'notes
    :title "Notes" :view (etaf-view (text "Hello"))))

Use the public mutation functions to move, resize, focus, maximize, minimize, restore and close windows. See the manual for the complete contract and architecture for ownership boundaries.

Runnable demo

M-x etaf-desktop-demo-open mounts a complete desktop with six sample applications (Notes, Tasks, Clock, Calculator, Chat and Monitor) spread over two workspaces. From a checkout with sibling providers:

cd etaf-desktop
emacs -Q -L ../ecss -L ../ebox -L ../etaf -L ../etaf-ui -L . \
  -l etaf-desktop -f etaf-desktop-demo-open

The source is examples/etaf-desktop-demo.el; each application is a compact model of the etaf-desktop-register-app contract described in the manual.

Checks

Run make check with Emacs 29.1 or newer and sibling etaf, etaf-ui, ebox and ecss checkouts.

The workspace's scripts/performance.py includes native mouse workloads named etaf-desktop.demo.*. They run the complete six-application demo with its Clock timer, covering Notes launch/close, Settings open/close and all four tabs, and Notes/Tasks content focus. Every sample checks lifecycle, active window and the unchanged geometry of existing windows. Launch/close samples use fresh demos; shell and focus samples retain their demo within a set. These workloads reopen the demo through its public entry, which closes any previous demo controller. Run them against your normal configured Emacs server, for example from the workspace root:

python3 scripts/performance.py run --mode gui \
  --scenario 'etaf-desktop.demo.settings-*' --scenario etaf-desktop.demo.focus \
  --sets 1 --samples 3 --diagnose

This is a diagnostic screen; the workspace performance manual describes the three-set acceptance protocol and its 10 ms interaction budget. Native input is prequeued and does not certify physical pointer-to-display latency.