feat(mirada): keymap configurable en RON, recargable en caliente
Los atajos de teclado dejan de estar cableados: ahora son un Keymap
configurable que vive sólo en el Cerebro. El Cuerpo nunca lo ve — sólo
recibe la lista de cadenas a interceptar (GrabKeys) y devuelve la
pulsada; es Desktop quien la traduce. Esa separación (qué interceptar
vs. qué significa) hace innecesario cualquier candado o Arc.
mirada-brain:
- keymap.rs — Keymap: from_ron/to_ron, load/save, load_or_init (escribe
un archivo por defecto documentado si falta; default sin pisar si está
corrupto), default_path (~/.config/mirada/keymap.ron), y watch sobre
notify para la recarga en caliente (KeymapWatch).
- DesktopAction: Display + FromStr — vocabulario textual estable
("focus-next", "layout:grid", "workspace:3"); evita los guiones que
romperían el RON de un enum.
- Desktop: with_keymap, set_keymap (cambio en caliente -> nuevo GrabKeys).
- Ejemplo keymap-default: imprime el archivo por defecto en RON.
Apps: mirada y mirada-compositor (modo embebido) cargan el keymap del
usuario al arrancar y lo recargan en caliente cuando el archivo cambia.
Disco RON, cable postcard (sólo la lista de cadenas), sin ejecutable
configurador. mirada-brain: 17 -> 29 tests.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -56,7 +56,8 @@ ejecuta operaciones de geometría".
|
||||
`placements(&Workspace, Rect)`.
|
||||
- **`mirada-brain`** — `Desktop`: salidas, 9 escritorios virtuales,
|
||||
registro de ventanas. `on_event(BodyEvent) -> Vec<BrainCommand>`;
|
||||
`DesktopAction` + mapa de teclas estilo *tiling WM* (`Super`).
|
||||
`DesktopAction` + `Keymap` configurable. `set_keymap` lo cambia en
|
||||
caliente y devuelve el `GrabKeys` a reenviar.
|
||||
- **`mirada-link`** — `Link<Out,In>` sobre socket Unix; hilo lector de
|
||||
fondo + canal `mpsc` para sondeo no bloqueante. `BrainLink`/`BodyLink`,
|
||||
`connected_pair` (socketpair), `connect`/`listen` por ruta.
|
||||
@@ -69,6 +70,31 @@ ejecuta operaciones de geometría".
|
||||
conecta a un Cuerpo; sin él corre en **simulación** (ventanas
|
||||
sintéticas, teclado de la propia ventana).
|
||||
|
||||
## Atajos de teclado configurables
|
||||
|
||||
El keymap vive **sólo en el Cerebro** (`mirada-brain::Keymap`). El Cuerpo
|
||||
nunca lo ve: recibe únicamente la lista de cadenas a interceptar en un
|
||||
`GrabKeys`, hace un `Vec::contains` ciego y devuelve la combinación
|
||||
pulsada como `Keybind`; es `Desktop` quien la traduce a `DesktopAction`.
|
||||
Esa separación —*qué* interceptar (lista barata, Cuerpo) vs. *qué
|
||||
significa* (el mapa, Cerebro)— hace innecesario cualquier candado o
|
||||
`Arc`: el mapa es monohilo y la lista se reemplaza de golpe.
|
||||
|
||||
- **Disco** — RON de texto en `~/.config/mirada/keymap.ron`, editable a
|
||||
mano y versionable. La app lo crea documentado en el primer arranque;
|
||||
si está corrupto, avisa y usa el de por defecto sin pisar el archivo.
|
||||
- **Cable** — sólo viaja la lista de cadenas (`GrabKeys`), vía el marco
|
||||
`postcard` que ya existe. No hay formato binario de configuración.
|
||||
- **Vocabulario** — la acción es una cadena estable (`"focus-next"`,
|
||||
`"layout:grid"`, `"workspace:3"`): `DesktopAction: Display + FromStr`.
|
||||
- **Recarga en caliente** — `Keymap::watch` (sobre `notify`) vigila el
|
||||
archivo; al cambiar, el dueño del `Desktop` recarga, llama a
|
||||
`set_keymap` y reenvía el `GrabKeys`. Sin reiniciar.
|
||||
- **Configurador** — no hay ejecutable aparte: el editor de texto del
|
||||
usuario, y la app `mirada` (que a futuro puede dibujar un editor visual
|
||||
sobre el mismo API `Keymap`). `cargo run -p mirada-brain --example
|
||||
keymap-default` imprime el archivo por defecto.
|
||||
|
||||
## Dependencias
|
||||
|
||||
- Todos los `lib` con `#![forbid(unsafe_code)]`. Cero Wayland, cero
|
||||
@@ -78,7 +104,7 @@ ejecuta operaciones de geometría".
|
||||
## Estado
|
||||
|
||||
Implementado y verde: `mirada-layout` (22 tests), `mirada-protocol`
|
||||
(9), `mirada-brain` (17), `mirada-link` (7), `mirada-body` (13), y la
|
||||
(9), `mirada-brain` (29), `mirada-link` (7), `mirada-body` (13), y la
|
||||
app `mirada` (compila; verificación visual manual).
|
||||
|
||||
El **Cuerpo** ya existe: `mirada-compositor` es un compositor Wayland
|
||||
|
||||
Reference in New Issue
Block a user