dacfbad124
El escritorio se podía recorrer con el foco, pero no reordenar. La 8d lo hace manipulable: el orden de teselado se separa de la identidad. - Escritorio gana `orden: Vec<usize>` — una permutacion que dice que ventana ocupa cada celda. Mover una ventana cambia su celda, no su indice_app: conserva su canal de teclado y su ranura de estado. - aplicar_teselado reparte los marcos segun el orden. - Alt+Enter promueve la ventana enfocada a la celda maestra; Alt+H/Alt+L la reordenan. mover_foco recorre ahora el orden, no los indices crudos. Verificado en QEMU (sendkey): con memoriosa enfocada, Alt+Enter la promueve a maestra y hola baja a la pila; Alt+L la devuelve a la pila. El foco —el borde indigo— viaja siempre con la ventana, no con la celda. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
72 lines
3.4 KiB
Markdown
72 lines
3.4 KiB
Markdown
# renaser — Fase 8 :: El compositor teselante
|
|
|
|
Plan de ataque. Para el estado general ver `ROADMAP.md`; para la arquitectura,
|
|
`ARCHITECTURE.md`.
|
|
|
|
## El objetivo
|
|
|
|
Hasta la Fase 7, cada aplicación llevaba su región escrita a mano en el
|
|
Manifiesto de Génesis: cuatro coordenadas fijas (`region_x`, `region_y`,
|
|
`region_ancho`, `region_alto`). El kernel las leía y componía cada app en su
|
|
rectángulo, inmóvil — una disposición rígida, decidida en la siembra.
|
|
|
|
La Fase 8 entrega esa decisión a un COMPOSITOR. El kernel deja de colocar las
|
|
ventanas a mano: las **tesela**. El motor del teselado es `mirada-layout` — el
|
|
mismo núcleo `no_std` que ordena las ventanas del compositor Wayland de
|
|
brahman, enlazado por `path` cruzando la frontera de workspace. Una sola lógica
|
|
de teselado sirve a dos mundos: el escritorio sobre Linux y el kernel
|
|
bare-metal.
|
|
|
|
## Sub-fases
|
|
|
|
### 8a — El compositor tesela — ✅ HECHA
|
|
|
|
- **`compositor.rs`** — enlaza `mirada-layout` y calcula un marco por app con
|
|
el algoritmo `MasterStack`, dentro del área de pantalla (todo menos la franja
|
|
superior reservada a la consola).
|
|
- El kernel **centra** el fotograma natural de cada app dentro de su marco
|
|
teselado; las apps conservan su tamaño natural y no cambian una instrucción.
|
|
- `EntradaApp.region_ancho/alto` pasa a significar el tamaño NATURAL del lienzo
|
|
de la app; `region_x/y` quedan vestigiales — el compositor decide la posición.
|
|
|
|
### 8b — Teselado interactivo — ✅ HECHA
|
|
|
|
- `Alt+Espacio` cicla en caliente los siete modos de teselado de
|
|
`mirada-layout` (`MasterStack`, `CenteredMaster`, `Spiral`, …).
|
|
- Re-teselar exige re-componer. La solución: el kernel guarda una CACHÉ del
|
|
último fotograma de cada app —acotada al lienzo natural, reservada una sola
|
|
vez— y recompone desde ella. Una app que sólo pintó en su `init` conserva su
|
|
imagen a través de cualquier reordenación, sin enterarse del cambio.
|
|
|
|
### 8c — Foco y enrutamiento selectivo — ✅ HECHA
|
|
|
|
- Una ventana ENFOCADA, con borde índigo brillante; las demás, borde gris
|
|
mate. `Alt+J` / `Alt+K` pasean el foco entre las ventanas vivas.
|
|
- El teclado deja de difundir a ciegas: una tecla ordinaria se entrega sólo a
|
|
la app enfocada; los mandos `Alt+…` se consumen en la IRQ.
|
|
- El registro `ESCRITORIO` del compositor cumple el papel del `Workspace` de
|
|
`mirada-layout` —ventanas, marcos, foco— sin adoptar su tipo: el kernel
|
|
necesita además la caché de respaldo, que el `Workspace` no contempla.
|
|
|
|
### 8d — Manipulación de ventanas — ✅ HECHA
|
|
|
|
- `Escritorio` separa el ORDEN de teselado de la IDENTIDAD de las ventanas
|
|
(`orden: Vec<usize>`): una ventana puede cambiar de celda sin perder su canal
|
|
de teclado ni su ranura de estado.
|
|
- `Alt+Enter` promueve la ventana enfocada a la celda maestra; `Alt+H` /
|
|
`Alt+L` la mueven atrás / adelante en el orden. El foco viaja con la ventana.
|
|
|
|
### Pendiente
|
|
|
|
- Orden-Z y solapamiento (ventanas flotantes); alta y baja de apps en vivo.
|
|
|
|
## Estructura de archivos
|
|
|
|
| archivo | estado | rol en la Fase 8 |
|
|
| --- | --- | --- |
|
|
| `kernel/src/compositor.rs` | **nuevo (8a)** | teselado con `mirada-layout` |
|
|
| `kernel/src/consola.rs` | a modificar (8a) | composición centrada en el marco |
|
|
| `kernel/src/wasm/mod.rs` | a modificar (8a) | `marco` + tamaño natural |
|
|
| `kernel/src/wasm/env.rs` | a modificar (8a) | validación contra el natural |
|
|
| `kernel/src/main.rs` | a modificar (8a) | el compositor en el arranque |
|