feat(mirada): acción spawn — lanzar programas desde el compositor
Un escritorio sin forma de abrir una terminal no es usable. Ahora el keymap puede lanzar programas: - `mirada-protocol`: nuevo `BrainCommand::Spawn(String)`. - `mirada-brain`: `DesktopAction::Spawn(String)` con forma textual `spawn:<comando>` (`Display`/`FromStr`); `Desktop::apply` la traduce a `BrainCommand::Spawn`. El keymap por defecto trae `Super+Shift+Return` → `spawn:foot`. `DesktopAction` deja de ser `Copy` (lleva el comando) — `Keymap::lookup` clona en vez de copiar. - `mirada-body`: `BodyOp::Spawn(String)`. - `mirada-compositor`: `exec_op` ejecuta el spawn con un helper `spawn_command` (`sh -c`, hereda `WAYLAND_DISPLAY`), que también recoge el lanzamiento de `MIRADA_STARTUP` — antes duplicado. `spawn:foot --title x` también funciona desde `mirada-ctl`. Tests nuevos del round-trip textual y del flujo atajo→comando. Nota: un keymap.ron ya existente no recibe el atajo nuevo; hay que añadir la línea a mano o borrar el archivo para regenerarlo. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -609,12 +609,7 @@ pub fn run() -> Result<(), Box<dyn Error>> {
|
||||
// App de arranque: si `MIRADA_STARTUP` trae un comando, se lanza como
|
||||
// hijo (hereda `WAYLAND_DISPLAY`) — cómodo para probar sin saltar de VT.
|
||||
if let Ok(cmd) = std::env::var("MIRADA_STARTUP") {
|
||||
if !cmd.trim().is_empty() {
|
||||
match std::process::Command::new("sh").arg("-c").arg(&cmd).spawn() {
|
||||
Ok(child) => println!(" app de arranque lanzada (pid {}): {cmd}", child.id()),
|
||||
Err(e) => eprintln!(" no pude lanzar «{cmd}»: {e}"),
|
||||
}
|
||||
}
|
||||
crate::spawn_command(&cmd);
|
||||
}
|
||||
|
||||
// 8 · El bucle `calloop`: VBlank, teclado, clientes y un timer.
|
||||
|
||||
Reference in New Issue
Block a user