Application-level desktop manager built on ETAF: windows, workspaces, focus order and z-order
app
  • Emacs Lisp 90.9%
  • Python 8.8%
  • Makefile 0.3%
Find a file
Kinneyzhang beb92b3865
Some checks failed
Repository structure / structure (push) Has been cancelled
chore(release): version 0.1.7
Ship the current sources as an immutable archive version.

Validation: `make -C etaf-desktop check` before this header-only change; the
archive install gate re-installs every target afterwards.
2026-10-27 21:46:56 +08:00
.githooks feat: add ETAF desktop manager application 2026-09-21 13:54:14 +08:00
.github/workflows chore(scripts): sync shared workspace tooling 2026-10-13 01:37:29 +08:00
benchmarks fix(etaf-desktop): keep the benchmark fixture inside the frame margin 2026-10-11 13:30:37 +08:00
docs fix(theme): frame the desktop from its settings and host its windows 2026-10-27 20:59:10 +08:00
examples fix(etaf-desktop): let window bodies reach the frame edges 2026-10-11 13:04:12 +08:00
lisp fix(theme): frame the desktop from its settings and host its windows 2026-10-27 20:59:10 +08:00
scripts chore(scripts): sync shared workspace tooling 2026-10-22 13:15:58 +08:00
tests fix(theme): frame the desktop from its settings and host its windows 2026-10-27 20:59:10 +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 fix(desktop): keep a nested desktop's bars inside its window 2026-10-24 23:24:35 +08:00
etaf-desktop.el chore(release): version 0.1.7 2026-10-27 21:46:56 +08:00
LICENSE chore: add the GPL-3.0 license 2026-10-13 00:48:59 +08:00
Makefile feat(desktop): add a standalone demo desktop with sample applications 2026-09-26 10:35:37 +08:00
README.md fix(desktop): align scoped help with the shared modal 2026-10-16 03:52:32 +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.

The demo desktop at a wide frame:

The demo desktop at a wide frame

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"
    ;; A window is seamless; the application keeps the frame margin clear.
    :view (etaf-view
           (box :padding '((lh 0) (ch 2) (lh 1) (ch 2))
                (text "Hello")))))

Use the public mutation functions to move, resize, focus, maximize, minimize, restore and close windows. ? shows searchable, read-only help in the Desktop buffer, using the focused application's bindings and reachable Desktop keys. Escape leaves search editing before closing help; clicking outside also closes it and restores focus, without splitting an Emacs window. Command execution remains available through M-x etaf-palette.

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.