Concepts
Plans, étiquettes, ardoises gather/summon, l'aperçu, ancres, marques, règles de fenêtres et groupes — les primitives que vous composez en un flux de travail.
Sur cette page
Le modèle mental couvre un seul plan : rangées, colonnes, cellules, divisions, onglets, flottants. Cette page est tout ce que vous bâtissez par-dessus — les primitives qui transforment atlaswm d'un simple tuileur en une boîte à outils. Aucune n'est un mode dans lequel vous êtes enfermé ; elles se composent.
Plans
Un seul plan infini suffit rarement. Un plan est un canevas indépendant complet — ses propres fenêtres, sa propre position de panoramique, son propre zoom. atlaswm maintient un pool de plans et n'en affiche qu'un à la fois : le plan actif remplit la vue, les autres restent inactifs en arrière-plan. Le changement est instantané et sans perte — chaque plan se souvient de l'endroit où vous l'avez laissé, vous retrouvez donc les mêmes fenêtres au même panoramique et au même zoom. Pensez aux espaces de travail i3/sway ou aux espaces nommés de niri, sauf que chacun est un atlas 2D complet plutôt qu'un plein écran.
Le point d'entrée quotidien est le sous-mode planes (Mod+o) : l/h
changent, n crée, q ferme un plan vide, Shift+l/Shift+h déplacent la fenêtre
ciblée vers le plan suivant/précédent et la suivent. Plus des raccourcis rapides en
dehors du sous-mode : Mod+period / Mod+comma.
Deux autres actions, pour des raccourcis ou atlasctl action :
plane-switch:<n>— sauter au n-ième plan (indexé à partir de 1), en créant au passage tous les plans nécessaires (la sensation des espaces de travail dynamiques niri/sway :plane-switch:3depuis un seul plan vous amène au plan 3, ayant discrètement créé les plans 2 et 3).plane-close— détruire le plan actif, mais seulement s'il est vide. Sur un plan non vide, c'est sans effet (un plan contenant des fenêtres n'est jamais démoli silencieusement).
Les identifiants de fenêtre restent globalement uniques d'un plan à l'autre, et
déplacer une fenêtre entre plans conserve son identifiant — même client, même
contenu, nouveau foyer. Par IPC, atlasctl query planes liste le pool et un champ
plane par fenêtre vous indique le foyer de chaque fenêtre.
Étiquettes
Une étiquette est un libellé libre que vous collez sur une fenêtre — work,
chat, mail, ce qui nomme un ensemble de travail. Les étiquettes sont
indépendantes des plans et de la géométrie de disposition : étiqueter ne
déplace jamais une fenêtre, et le même nom peut être porté par des fenêtres
dispersées sur différents plans. Une fenêtre peut porter un nombre quelconque
d'étiquettes ; elles l'accompagnent par identifiant (la déplacer, la rendre
flottante, la passer en plein écran ne touche pas aux étiquettes) et disparaissent
à sa fermeture.
Quatre verbes agissent sur la fenêtre ciblée :
tag-toggle:<name>— ajoute si absente, retire si présente.tag-add:<name>/tag-remove:<name>— ajout / retrait explicite.tag-clear— retire toutes les étiquettes d'un coup.
Il n'y a aucun raccourci d'étiquette par défaut — les noms d'étiquettes sont les
vôtres, la configuration ne peut donc pas les deviner. Définissez les vôtres
("Mod+F1" "tag-toggle:work") ou pilotez-les via atlasctl. Les étiquettes sont
aussi ce sur quoi opèrent gather/summon, et ce que les règles de fenêtre
peuvent apposer à l'ouverture.
Ardoises : gather et summon
Une étiquette nomme un ensemble de travail ; gather (rassembler) et summon (invoquer) vous laissent voir tout cet ensemble d'un coup — temporairement, sans rien déplacer. Les deux sont un emprunt vivant : rien ne quitte son plan d'origine, et la fermeture restaure tout exactement comme c'était.
Gather
gather-toggle:<tag> rassemble toutes les fenêtres portant <tag> — où qu'elles
vivent — dans une vue tuilée temporaire qui remplace votre vue actuelle, et
cette vue est pleinement interactive : focus, redimensionnement, déplacement,
onglets, plein écran y fonctionnent tous. Fermez-la (la même étiquette de nouveau,
ou gather-dismiss) et chaque plan est restauré, chaque fenêtre à sa place. Lancer
une application pendant un gather la fait atterrir sur le vrai plan actif (donc un
terminal ouvert en plein gather n'est pas perdu à la fermeture) ; fermer une fenêtre
rassemblée la ferme partout ; tout changement de plan ferme d'abord le gather.
Summon
Là où gather remplace votre vue, summon-toggle:<tag> la superpose : il fait
flotter au-dessus de votre plan actuel toutes les fenêtres portant <tag> qui
vivent sur un autre plan — un coup d'œil sur l'ensemble de travail sans quitter
l'endroit où vous êtes. Une fenêtre étiquetée déjà sur le plan actuel reste tuilée ;
summon la complète. Les fenêtres invoquées sont des flottants ordinaires, pleinement
interactifs. Basculez la même étiquette (ou summon-dismiss) pour les masquer.
Gather et summon sont mutuellement exclusifs — une seule vue d'ardoise à la
fois. Il n'y a de raccourci par défaut pour aucun des deux ; définissez les vôtres
ou utilisez atlasctl.
Aperçu
Un plan remplit la vue ; l'aperçu les montre tous à la fois. Basculez-le avec
overview-toggle, ou continuez simplement de dézoomer — un cran au-delà du
fit-plane (Mod+z de nouveau au dernier échelon) l'ouvre, l'échelle parcourant donc
100% → 50% → fit → overview. Chaque plan devient un mini-canevas vivant à
l'échelle dans une grille (les fenêtres continuent de s'afficher — un watch date
continue de tourner), et le plan actif arbore un cadre d'accentuation.
C'est de la navigation pure : cliquez sur une fenêtre pour sauter sur son plan
avec elle au focus, ou cliquez sur un plan vide pour y sauter — l'aperçu se
ferme et vous atterrissez sur un vrai plan. Tant qu'il est ouvert, les raccourcis
normaux sont inertes ; seules les sorties agissent (Escape, zoom, ou de nouveau
overview-toggle). Vous pouvez aussi glisser une fenêtre de la cellule d'un plan
vers la cellule d'un autre plan pour l'y déplacer — la cellule de destination se
surligne pendant le glissement ; un simple clic continue de sauter.
Il n'y a pas de raccourci par défaut : dézoomer au-delà du fit-plane est le chemin de découverte.
Ancres
Une ancre est un signet de vue nommé sur un plan — un endroit où vous revenez d'un saut.
anchor-set:<name>enregistre le centre de la vue actuelle du plan actif.anchor-jump:<name>recentre la vue dessus (indépendant du zoom — la valeur stockée est une coordonnée de plan).anchor-clear:<name>la supprime.
Les ancres sont par plan : le même nom sur le plan 2 est un endroit différent que sur le plan 1. Vous pouvez ensemencer des ancres sur le plan 1 depuis la configuration — utile pour une disposition fixe à laquelle vous revenez toujours :
anchors {
"hub" x=0 y=0
"mail" x=4000 y=0
}
binds {
"Mod+a" "anchor-jump:hub"
"Mod+e" "anchor-jump:mail"
}
C'est la colonne vertébrale d'un flux de travail en moyeu et satellites : dispersez des ensembles de travail sur un grand plan et sautez de l'un à l'autre par leur nom.
Marques
Les marques sont à la manière de vim : posez une marque sur une fenêtre, et revenez-y d'un saut plus tard. La casse du nom choisit la portée :
- minuscules = locale (par plan) : le même nom est une fenêtre différente sur chaque plan.
- MAJUSCULES = globale : une seule table à l'échelle de la session ; le saut suit la fenêtre d'un plan à l'autre.
mark-set:<name> marquer la fenêtre ciblée
mark-jump:<name> cibler la fenêtre marquée (change de plan si besoin)
mark-clear:<name> supprimer la marque
Il n'y a pas de raccourci de marque par défaut ; la configuration typique est un
sous-mode mark pour poser et un sous-mode jump pour sauter (ainsi Mod+m a
marque, Mod+' a saute). Les marques n'existent qu'à l'exécution (l'identité d'une
fenêtre n'est pas stable d'un redémarrage à l'autre, elles ne sont donc pas
ensemencées depuis la configuration). Les marques s'effacent automatiquement à la
fermeture de leur fenêtre.
À rapprocher : jump-to-window (jump-to-window) appose sur chaque fenêtre
actuellement à l'écran un badge avec une lettre ; appuyez sur la lettre pour cibler
cette fenêtre. C'est un « cible celle-là » rapide sans avoir à mémoriser une marque.
Règles de fenêtre
Faites correspondre une fenêtre par app-id et/ou titre (regex) à son ouverture, et redéfinissez où et comment elle atterrit. Plusieurs règles correspondantes se cumulent dans l'ordre du document (la dernière l'emporte sur un scalaire ; les étiquettes de toutes les correspondances s'unionnent). Les règles s'appliquent aux fenêtres ouvertes après un (re)chargement.
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"
}
}
Redéfinitions disponibles : plane <n> (plan cible indexé à partir de 1, ouvert en
arrière-plan — vous restez en place), tag "<name>" (répétable, s'unionnent),
float #true, size <w> <h> (pour les flottants), open-as-tab #true (rejoindre
le conteneur ciblé en tant qu'onglet). Une regex incorrecte est une erreur de
configuration — la dernière configuration valide continue de s'exécuter, et vous la
corrigez par rechargement à chaud. Les règles correspondent aussi aux fenêtres
XWayland (X11), par leur WM_CLASS / titre.
Pas encore : l'étiquetage automatique se fait via les verbes manuels
tag-*plus ces règles ; il n'y a pas encore de « toujours ouvrir à l'ancre Y » par application (le spawn-at-anchor est reporté). Utilisez une règleplane <n>plus un raccourcianchor-jumppour l'équivalent le plus proche aujourd'hui.
Groupes
Un groupe est un amas tuilé connexe. Un plan peut contenir plusieurs groupes déconnectés — des amas de tuiles posés à l'écart sur le canevas, le modèle d'ensembles de travail à la driftwm.
spawn-new-groupdémarre un amas neuf en haut à gauche de la vue.group-next/group-prevbasculent entre les amas d'un plan (en restaurant le focus de chaque groupe).group-to-plane-next/group-to-plane-prev/group-to-plane:<n>déplacent le groupe ciblé entier vers un autre plan, intact (et le suivent). Les identifiants de fenêtre sont inchangés, les étiquettes suivent donc.group-tag-toggle:<name>(et-add/-remove/group-tag-clear) étiquettent toutes les fenêtres du groupe d'un coup. Comme cela réutilise le magasin d'étiquettes,gather/summonsur cette étiquette devient « afficher temporairement tout ce groupe » gratuitement.
Une configuration naturelle associe ces verbes à un sous-mode groups à action
unique :
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"
}
}
Pas encore : déplacer des fenêtres individuelles entre groupes, repositionner un groupe, et le focus géométrique inter-groupes ne sont pas implémentés — les groupes se déplacent et s'étiquettent en bloc, mais vous ne brassez pas de fenêtres au-delà des frontières de groupe aujourd'hui.
Et ensuite
Ces primitives sont délibérément petites pour que vous puissiez les combiner. Les recettes de flux de travail montrent quatre façons de faire exactement cela, chacune avec une configuration prête à copier-coller.