Conceptos

Planos, etiquetas, blocs gather/summon, la vista general, anclas, marcas, reglas de ventanas y grupos — las primitivas que compones en un flujo de trabajo.

El modelo mental cubre un solo plano: filas, columnas, celdas, divisiones, pestañas, flotantes. Esta página es todo lo que construyes encima de eso — las primitivas que convierten a atlaswm de un tilador en una caja de herramientas. Ninguna de estas es un modo en el que quedas atrapado; se componen.

Planos

Un solo plano infinito rara vez basta. Un plano es un lienzo completo e independiente — con sus propias ventanas, su propia posición de paneo, su propio zoom. atlaswm mantiene un pool de ellos y muestra exactamente uno a la vez: el plano activo llena la vista, el resto descansa inactivo en segundo plano. Cambiar es instantáneo y sin pérdidas — cada plano recuerda dónde lo dejaste, así que vuelves a las mismas ventanas con el mismo paneo y zoom. Piensa en los workspaces de i3/sway o en los workspaces con nombre de niri, salvo que cada uno es un atlas 2D completo en lugar de una pantalla.

El punto de entrada cotidiano es el submodo planes (Mod+o): l/h cambian, n crea, q cierra un plano vacío, Shift+l/Shift+h mueven la ventana enfocada al plano siguiente/anterior y la siguen. Más atajos rápidos fuera del submodo: Mod+period / Mod+comma.

Dos acciones más, para atajos o atlasctl action:

  • plane-switch:<n> — salta al n-ésimo plano (en base 1), creando los planos intermedios por el camino (la sensación de workspaces dinámicos de niri/sway: plane-switch:3 desde un solo plano te lleva al plano 3, habiendo creado discretamente el 2 y el 3).
  • plane-close — destruye el plano activo, pero solo si está vacío. En un plano no vacío no hace nada (un plano con ventanas nunca se desmonta en silencio).

Los ids de ventana se mantienen globalmente únicos entre planos, y mover una ventana entre planos conserva su id — mismo cliente, mismo contenido, nuevo hogar. Por IPC, atlasctl query planes lista el pool y un campo plane por ventana te dice el hogar de cada una.

Etiquetas

Una etiqueta es una marca de formato libre que pegas a una ventana — work, chat, mail, lo que dé nombre a un conjunto de trabajo. Las etiquetas son independientes de los planos y de la geometría del diseño: etiquetar nunca mueve una ventana, y el mismo nombre puede ir en ventanas repartidas por distintos planos. Una ventana puede llevar cualquier número de etiquetas; viajan con ella por id (moverla, hacerla flotante, ponerla a pantalla completa deja las etiquetas intactas) y se sueltan cuando se cierra.

Cuatro verbos actúan sobre la ventana enfocada:

  • tag-toggle:<name> — la añade si falta, la quita si está.
  • tag-add:<name> / tag-remove:<name> — añadir / quitar explícito.
  • tag-clear — quita todas las etiquetas a la vez.

No hay atajos de etiqueta por defecto — los nombres de etiqueta son tuyos, así que la configuración no puede adivinarlos. Asigna los tuyos ("Mod+F1" "tag-toggle:work") o contrólalos por atlasctl. Las etiquetas son también sobre lo que operan gather/summon, y lo que las reglas de ventana pueden estampar al abrir.

Blocs ocultos: gather y summon

Una etiqueta da nombre a un conjunto de trabajo; gather (reunir) y summon (invocar) te dejan ver todo ese conjunto a la vez — temporalmente, sin mover nada. Ambos son un préstamo en vivo: nada abandona su plano de origen, y descartarlo restaura todo exactamente como estaba.

Gather

gather-toggle:<tag> trae cada ventana que lleva <tag> — viva donde viva — a una vista tilada temporal que reemplaza tu vista actual, y esa vista es totalmente interactiva: enfocar, redimensionar, mover, agrupar en pestañas y pantalla completa funcionan en ella. Descártala (la misma etiqueta otra vez, o gather-dismiss) y cada plano se restaura, con cada ventana de vuelta donde estaba. Lanzar algo mientras estás en gather aterriza en el plano activo real (así que un terminal que abres a mitad de gather no se pierde al descartar); cerrar una ventana reunida la cierra en todas partes; cualquier cambio de plano descarta primero.

Summon

Donde gather reemplaza tu vista, summon-toggle:<tag> la superpone: hace flotar cada ventana que lleva <tag> y vive en otro plano sobre tu plano actual — un vistazo al conjunto de trabajo sin abandonar donde estás. Una ventana etiquetada que ya está en el plano actual permanece tilada; summon la complementa. Las ventanas invocadas son flotantes ordinarias, totalmente interactivas. Alterna la misma etiqueta (o summon-dismiss) para ocultarlas.

Gather y summon son mutuamente excluyentes — solo una vista de bloc oculto a la vez. No hay atajos por defecto para ninguno; asigna los tuyos o usa atlasctl.

Vista general

Un plano llena la vista; la vista general los muestra todos a la vez. Altérnala con overview-toggle, o simplemente sigue alejando el zoom — un paso más allá del ajuste al plano (Mod+z de nuevo en el último peldaño) la abre, así que la escalera recorre 100% → 50% → ajuste → vista general. Cada plano se convierte en un minilienzo escalado en vivo dentro de una cuadrícula (las ventanas siguen renderizando — un watch date sigue avanzando), y el plano activo lleva un marco de acento.

Es solo para navegar: haz clic en cualquier ventana para saltar a su plano con ella enfocada, o haz clic en un plano vacío para saltar allí — la vista general se cierra y aterrizas en un plano real. Mientras está abierta los atajos normales están inertes; solo actúan las salidas (Escape, acercar el zoom, o overview-toggle de nuevo). También puedes arrastrar una ventana desde la celda de un plano a la celda de otro plano para moverla allí — la celda de destino se resalta mientras arrastras; un clic simple sigue saltando.

No hay atajo por defecto: alejar el zoom más allá del ajuste al plano es el camino descubrible.

Anclas

Un ancla es un marcador de vista con nombre en un plano — un punto al que saltas de vuelta.

  • anchor-set:<name> registra el centro de la vista actual del plano activo.
  • anchor-jump:<name> recentra la vista sobre él (independiente del zoom — el valor almacenado es una coordenada del plano).
  • anchor-clear:<name> lo elimina.

Las anclas son por plano: el mismo nombre en el plano 2 es un punto distinto que en el plano 1. Puedes sembrar anclas en el plano 1 desde la configuración — útil para un diseño fijo al que siempre vuelves:

anchors {
    "hub"  x=0    y=0
    "mail" x=4000 y=0
}

binds {
    "Mod+a" "anchor-jump:hub"
    "Mod+e" "anchor-jump:mail"
}

Esta es la columna vertebral de un flujo de trabajo hub-and-satellite: esparce conjuntos de trabajo por un gran plano y salta entre ellos por nombre.

Marcas

Las marcas son al estilo vim: pon una marca en una ventana, salta de vuelta a ella más tarde. La capitalización del nombre elige el alcance:

  • minúsculas = local (por plano): el mismo nombre es una ventana distinta en cada plano.
  • MAYÚSCULAS = global: una sola tabla para toda la sesión; el salto sigue a la ventana a través de los planos.
mark-set:<name>     marca la ventana enfocada
mark-jump:<name>    enfoca la ventana marcada (cambia de plano si hace falta)
mark-clear:<name>   elimina la marca

No hay atajos de marca por defecto; el montaje típico es un submodo mark para poner y un submodo jump para saltar (de modo que Mod+m a marca, Mod+' a salta). Las marcas son solo en tiempo de ejecución (la identidad de las ventanas no es estable entre reinicios, así que no se siembran desde la configuración). Las marcas se autoeliminan cuando su ventana se cierra.

Relacionado: jump-to-window (jump-to-window) pone una insignia con una letra en cada ventana que está actualmente en pantalla; pulsa la letra para enfocar esa ventana. Es un rápido "enfoca esa" sin recordar una marca.

Reglas de ventana

Empareja una ventana por app-id y/o título (regex) cuando se abre, y sobrescribe dónde y cómo aterriza. Varias reglas coincidentes se encadenan en orden de documento (la última gana en un escalar; las etiquetas de todas las coincidencias se unen). Las reglas se aplican a las ventanas abiertas después de una (re)carga.

rules {
    rule {
        match app-id="^(firefox|chromium)$"
        plane 2
        tag "web"
    }
    rule {
        match title=".*Picture-in-Picture.*"
        float #true
        size 480 270
    }
    rule {
        match app-id="Slack"
        open-as-tab #true
        tag "comms"
    }
}

Sobrescrituras disponibles: plane <n> (plano objetivo en base 1, abierto en segundo plano — tú te quedas donde estás), tag "<name>" (repetible, se une), float #true, size <w> <h> (para flotantes), open-as-tab #true (se une al contenedor enfocado como pestaña). Una regex inválida es un error de configuración — la última configuración válida sigue ejecutándose, y la corriges mediante recarga en vivo. Las reglas también emparejan ventanas de XWayland (X11), por su WM_CLASS / título.

Aún no: el autoetiquetado son los verbos manuales tag-* más estas reglas; todavía no hay un "abre siempre en el ancla Y" por app (spawn-at-anchor está aplazado). Usa una regla plane <n> más un atajo anchor-jump para el equivalente más cercano por ahora.

Grupos

Un grupo es un clúster tilado conectado. Un plano puede contener varios grupos desconectados — clústeres de mosaicos separados sobre el lienzo, el modelo de conjuntos de trabajo al estilo driftwm.

  • spawn-new-group inicia un clúster nuevo en la esquina superior izquierda de la vista.
  • group-next / group-prev cambian entre los clústeres de un plano (restaurando el foco de cada grupo).
  • group-to-plane-next / group-to-plane-prev / group-to-plane:<n> mueven el grupo enfocado entero a otro plano intacto (y lo siguen). Los ids de ventana no cambian, así que las etiquetas viajan con ellos.
  • group-tag-toggle:<name> (y -add / -remove / group-tag-clear) etiquetan cada ventana del grupo a la vez. Como eso reutiliza el almacén de etiquetas, gather/summon sobre esa etiqueta es "muestra temporalmente todo este grupo" de forma gratuita.

Un montaje natural empareja estos con un submodo groups de un solo disparo:

binds {
    "Mod+g" "submap:groups"
}

submaps {
    groups oneshot=#true {
        "n" "spawn-new-group"
        "l" "group-next"
        "h" "group-prev"
        "L" "group-to-plane-next"
        "t" "group-tag-toggle:work"
        "Escape" "submap-exit"
    }
}

Aún no: mover ventanas individuales entre grupos, reposicionar un grupo y el foco geométrico entre grupos no están implementados — los grupos se mueven y etiquetan como una unidad, pero hoy no barajas ventanas a través de las fronteras de los grupos.

A dónde ir después

Estas primitivas son deliberadamente pequeñas para que puedas combinarlas. Las recetas de flujo de trabajo muestran cuatro maneras de hacer exactamente eso, cada una con una configuración lista para copiar y pegar.