feat(mirada): 3 layouts nuevos + redimensionar el área maestra
mirada-layout pasa de 4 a 7 modos de teselado, todos intercambiables por el API (SetLayout / CycleLayout / mirada-ctl layout <modo>): - Rows: filas horizontales de igual alto (complemento de Columns). - Spiral: espiral de Fibonacci — cada ventana parte por la mitad el espacio restante, alternando el sentido del corte. - CenteredMaster: maestra centrada + pila a ambos lados (monitores anchos). LayoutMode::ALL + next() definen el ciclo. Añade dos acciones, GrowMaster/ShrinkMaster (Super+l / Super+h), que ajustan master_ratio en caliente — ese parámetro existía pero no había forma de tocarlo. Cableado completo: tile(), cycle, slugs Display/FromStr, keymap por defecto (Super+r/d/s), HUD de mirada, mirada-ctl actions. El ejemplo headless-ctl ahora imprime la geometría para verificar los layouts. mirada-layout 22->26 tests, mirada-brain 37->39. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -61,8 +61,9 @@ WAYLAND_DISPLAY=wayland-1 foot # o weston-terminal, alacritty, …
|
||||
|
||||
Las ventanas se teselan solas. El teclado, con la ventana del compositor
|
||||
enfocada, maneja el escritorio con atajos `Super+…`: foco `Super+j/k`,
|
||||
ciclar layout `Super+space`, escritorios `Super+1..9`, cerrar `Super+q`.
|
||||
Cierra la ventana del compositor para salir.
|
||||
los 7 layouts en `Super+t/m/g/c/r/d/s` (o ciclar con `Super+space`), área
|
||||
maestra `Super+h/l`, escritorios `Super+1..9`, cerrar `Super+q`. Cierra
|
||||
la ventana del compositor para salir.
|
||||
|
||||
## Atajos de teclado
|
||||
|
||||
|
||||
@@ -109,18 +109,25 @@ fn print_help() {
|
||||
}
|
||||
|
||||
fn print_actions() {
|
||||
println!(
|
||||
"Acciones de mirada-ctl:\n \
|
||||
focus-next mueve el foco a la siguiente ventana\n \
|
||||
focus-prev mueve el foco a la anterior\n \
|
||||
focus-window <id> enfoca la ventana <id> (ver: mirada-ctl windows)\n \
|
||||
move-forward adelanta la ventana enfocada en el teselado\n \
|
||||
move-backward la atrasa\n \
|
||||
close-focused cierra la ventana enfocada\n \
|
||||
cycle-layout pasa al siguiente modo de teselado\n \
|
||||
layout <modo> master-stack | monocle | grid | columns\n \
|
||||
workspace <n> activa el escritorio n (1..9)\n \
|
||||
send-to-workspace <n> manda la enfocada al escritorio n\n \
|
||||
quit apaga el compositor"
|
||||
// Cadena multilínea literal: la indentación de cada línea es la que
|
||||
// se imprime (el `\` tras la comilla se come sólo el primer salto).
|
||||
print!(
|
||||
"\
|
||||
Acciones de mirada-ctl:
|
||||
focus-next mueve el foco a la siguiente ventana
|
||||
focus-prev mueve el foco a la anterior
|
||||
focus-window <id> enfoca la ventana <id> (ver: mirada-ctl windows)
|
||||
move-forward adelanta la ventana enfocada en el teselado
|
||||
move-backward la atrasa
|
||||
close-focused cierra la ventana enfocada
|
||||
cycle-layout pasa al siguiente modo de teselado
|
||||
layout <modo> master-stack · centered-master · spiral
|
||||
grid · columns · rows · monocle
|
||||
grow-master agranda el área de la ventana maestra
|
||||
shrink-master la encoge
|
||||
workspace <n> activa el escritorio n (1..9)
|
||||
send-to-workspace <n> manda la enfocada al escritorio n
|
||||
quit apaga el compositor
|
||||
"
|
||||
);
|
||||
}
|
||||
|
||||
@@ -20,9 +20,10 @@
|
||||
//!
|
||||
//! ```text
|
||||
//! n abre una ventana tab / espacio cicla layout
|
||||
//! w cierra la enfocada t g c m layout directo
|
||||
//! j / k foco siguiente/anterior 1..9 ir a escritorio
|
||||
//! Shift+j / k mueve la enfocada Ctrl+1..9 enviar a escritorio
|
||||
//! w cierra la enfocada t m g c r d s layout directo
|
||||
//! j / k foco siguiente/anterior h / l área maestra −/+
|
||||
//! Shift+j / k mueve la enfocada 1..9 ir a escritorio
|
||||
//! Ctrl+1..9 enviar a escritorio
|
||||
//! ```
|
||||
//!
|
||||
//! Los pips de escritorio y las ventanas del lienzo son **clicables**, y
|
||||
@@ -285,6 +286,11 @@ impl Mirada {
|
||||
"m" => self.act(DesktopAction::SetLayout(LayoutMode::Monocle)),
|
||||
"g" => self.act(DesktopAction::SetLayout(LayoutMode::Grid)),
|
||||
"c" => self.act(DesktopAction::SetLayout(LayoutMode::Columns)),
|
||||
"r" => self.act(DesktopAction::SetLayout(LayoutMode::Rows)),
|
||||
"d" => self.act(DesktopAction::SetLayout(LayoutMode::CenteredMaster)),
|
||||
"s" => self.act(DesktopAction::SetLayout(LayoutMode::Spiral)),
|
||||
"h" => self.act(DesktopAction::ShrinkMaster),
|
||||
"l" => self.act(DesktopAction::GrowMaster),
|
||||
d if d.len() == 1 && d.as_bytes()[0].is_ascii_digit() && d != "0" => {
|
||||
let n = (d.as_bytes()[0] - b'1') as usize;
|
||||
if ctrl {
|
||||
@@ -312,6 +318,9 @@ fn mode_name(m: LayoutMode) -> &'static str {
|
||||
LayoutMode::Monocle => "monóculo",
|
||||
LayoutMode::Grid => "rejilla",
|
||||
LayoutMode::Columns => "columnas",
|
||||
LayoutMode::Rows => "filas",
|
||||
LayoutMode::CenteredMaster => "maestro centrado",
|
||||
LayoutMode::Spiral => "espiral",
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user