feat(mirada): API de acciones — mirada-ctl + HUD interactivo
Toda acción de escritorio converge en Desktop::apply(DesktopAction); el keymap era sólo un front-end. Esta tanda añade los otros tres. - DesktopAction::FocusWindow(WindowId): direccionamiento directo de una ventana (no sólo ciclar); si está en otro escritorio, salta a él. DesktopAction pasa a ser Serialize/Deserialize (postcard) además de Display/FromStr. - mirada-brain::ctl: el API de control externo. CtlRequest/CtlReply (marco postcard), CtlServer/CtlConn no bloqueantes y send_request. El Cerebro abre el socket y atiende en su bucle: la app mirada siempre, mirada-compositor sólo con el Cerebro embebido. - mirada-ctl: CLI de control estilo swaymsg/hyprctl — `mirada-ctl focus-next | focus-window 5 | workspace 3 | windows`. Parsea la acción de los argumentos vía FromStr. - HUD interactivo en la app mirada: pips de escritorio y ventanas del lienzo clicables (SwitchWorkspace / FocusWindow). - Ejemplo headless-ctl: un Cerebro sin gráficos para probar mirada-ctl en modo desatendido. Verificado end-to-end. mirada-brain: 29 -> 37 tests. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -27,6 +27,7 @@ ejecuta operaciones de geometría".
|
||||
| `mirada-body` | lib | Contabilidad del Cuerpo: `BodyState`, traduce comandos a `BodyOp` |
|
||||
| `mirada` (app) | bin/GPUI | El Cerebro: ventana que tesela el escritorio y manda geometría |
|
||||
| `mirada-compositor`| bin/smithay | El Cuerpo: compositor Wayland real (backend `winit`, anidado) |
|
||||
| `mirada-ctl` (app) | bin/CLI | Control externo del Cerebro (estilo `swaymsg`): acciones y consultas |
|
||||
|
||||
## Flujo
|
||||
|
||||
@@ -68,7 +69,11 @@ ejecuta operaciones de geometría".
|
||||
- **`mirada` (app)** — envuelve `Desktop` y lo pinta (barra de
|
||||
escritorios + modo + foco, lienzo teselado). Con `MIRADA_SOCKET`
|
||||
conecta a un Cuerpo; sin él corre en **simulación** (ventanas
|
||||
sintéticas, teclado de la propia ventana).
|
||||
sintéticas, teclado de la propia ventana). Pips de escritorio y
|
||||
ventanas clicables.
|
||||
- **`mirada-ctl` (app)** — CLI de control: parsea la acción de los
|
||||
argumentos (`DesktopAction: FromStr`) y la manda al Cerebro por el
|
||||
socket de control; `windows` y `actions` para consultar.
|
||||
|
||||
## Atajos de teclado configurables
|
||||
|
||||
@@ -95,6 +100,28 @@ significa* (el mapa, Cerebro)— hace innecesario cualquier candado o
|
||||
sobre el mismo API `Keymap`). `cargo run -p mirada-brain --example
|
||||
keymap-default` imprime el archivo por defecto.
|
||||
|
||||
## API de acciones
|
||||
|
||||
Toda acción de escritorio converge en un único embudo:
|
||||
`Desktop::apply(DesktopAction) -> Vec<BrainCommand>`. El keymap no es más
|
||||
que un front-end (`Keybind` → `lookup` → `apply`); hay otros tres:
|
||||
|
||||
- **`DesktopAction::FocusWindow(WindowId)`** — direccionamiento directo de
|
||||
una ventana (no sólo ciclar con `FocusNext`/`Prev`); si está en otro
|
||||
escritorio, salta a él. Lo usan la taskbar y `mirada-ctl`.
|
||||
- **HUD interactivo** (app `mirada`) — los pips de escritorio y las
|
||||
ventanas del lienzo son clicables: clic = `apply` de la acción.
|
||||
- **`mirada-ctl`** — control externo por línea de comandos
|
||||
(`mirada-ctl focus-next`, `workspace 3`, `windows`). Habla con el
|
||||
Cerebro por un socket Unix aparte; el módulo `mirada-brain::ctl` define
|
||||
`CtlRequest`/`CtlReply` (marco `postcard`), `CtlServer`/`CtlConn` y
|
||||
`send_request`. El Cerebro (la app `mirada` siempre; `mirada-compositor`
|
||||
sólo embebido) abre el socket y atiende en su bucle. `DesktopAction`
|
||||
viaja como enum serializado: contrato tipado de punta a punta.
|
||||
|
||||
`cargo run -p mirada-brain --example headless-ctl` levanta un Cerebro sin
|
||||
gráficos para ejercitar `mirada-ctl` en modo desatendido.
|
||||
|
||||
## Dependencias
|
||||
|
||||
- Todos los `lib` con `#![forbid(unsafe_code)]`. Cero Wayland, cero
|
||||
@@ -104,8 +131,9 @@ significa* (el mapa, Cerebro)— hace innecesario cualquier candado o
|
||||
## Estado
|
||||
|
||||
Implementado y verde: `mirada-layout` (22 tests), `mirada-protocol`
|
||||
(9), `mirada-brain` (29), `mirada-link` (7), `mirada-body` (13), y la
|
||||
app `mirada` (compila; verificación visual manual).
|
||||
(9), `mirada-brain` (37), `mirada-link` (7), `mirada-body` (13), las
|
||||
apps `mirada` y `mirada-compositor` (compilan; verificación visual
|
||||
manual) y `mirada-ctl` (CLI, probado vía el ejemplo `headless-ctl`).
|
||||
|
||||
El **Cuerpo** ya existe: `mirada-compositor` es un compositor Wayland
|
||||
teselante real sobre `smithay`, con backend `winit` — corre **anidado**
|
||||
|
||||
Reference in New Issue
Block a user