Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

4. Le cockpit TUI

Tout ce que tu as fait en ligne de commande a un foyer : un cockpit vivant, piloté au clavier — ta salle de contrôle pour toute la flotte. C’est dans l’esprit de k9s ou htop : une interface terminal plein écran où tu vois la flotte, tu plonges dans n’importe quel dépôt, PR ou run CI, et tu agis — fusionner, approuver, checkout — sans jamais quitter le terminal.

Tu l’as croisé un instant au chapitre 1. Maintenant que tu as une vraie flotte, faisons la visite guidée complète. Ouvre-le et suis le mouvement.

The hawser TUI cockpit dashboard

La salle de contrôle pour toute la flotte — lire, plonger et agir sans quitter le terminal.

🎯 Dans ce chapitre, tu vas apprendre à…

  • Ouvrir le cockpit avec un simple haw (ou haw dash –demo pour explorer hors ligne).
  • Lire la grille de flotte en direct — les mêmes colonnes que haw status, qui se rafraîchissent d’elles-mêmes.
  • Maîtriser la boucle centrale : lire → entrer (Enter) → agir → revenir (Esc).
  • Agir depuis la rangée de repos : synchroniser, marquer, exécuter, filtrer, parcourir les fichiers, et sauter vers les vues PR / CI / gouvernance avec les chiffres 17.
  • Ouvrir le menu d’actions contextuel d’une vue avec a — fusionner, approuver, checkout, request-PR, land — chacune protégée par une confirmation.
  • Parcourir les fichiers de n’importe quel dépôt à n’importe quelle branche, tag ou SHA — en local ou directement depuis la forge, sans checkout.
  • Utiliser la barre de commande (:) qui reflète la CLI que tu connais déjà.

Ta salle de contrôle : la grille de la flotte, les plongées, les vues PR/CI et les actions au clavier — le tout dans le terminal.

🚁 1. Ouvre-le

Lance haw sans sous-commande :

haw

Tu veux juste explorer sans espace de travail réel ni réseau ? Utilise le contrôleur de démo intégré — il est peuplé de dépôts, PR et runs CI préfabriqués, donc chaque vue a quelque chose à montrer :

haw dash --demo

Dans les deux cas, tu atterris sur la grille de la flotte — l’écran d’accueil du cockpit.

📋 2. Lis la grille de la flotte

 haw ▸ ~/work/gateway ───────────────────────── stack: gateway   lock: ✓   repos: 3/3
──────────────────────────────────────────────────────────────────────────────────────
   REPO        BRANCH ▲      HEAD       DIRTY   DRIFT   ↑ / ↓    MERGE
   kernel      v6.1.2        a1b2c3d4     ·       ·      0 / 0     —
 ◉ hal         main          9f8e7d6c    yes      ·      2 / 0     —
▸⚠ app-mqtt    release/2.x   4d5e6f7a     ·      DRIFT   0 / 5     —
──────────────────────────────────────────────────────────────────────────────────────
 hal  ›  path hal/   branch main (ahead 2)   dirty   locked 9f8e7d6c   grp firmware
──────────────────────────────────────────────────────────────────────────────────────
 [s]ync [f]iles [x]shell [!]exec [/]filter [p]roblems [a]ctions [1-7]views [:]cmd [?]help

C’est haw status, vivant. Chaque ligne est un dépôt ; les colonnes sont les mêmes que tu connais déjà — branche, HEAD, dirty, drift, en avance/en retard. Le est ton curseur, marque un dépôt sélectionné et signale un problème (comme la dérive sur app-mqtt). La grille s’actualise automatiquement environ toutes les 5 secondes en veille — jamais pendant que tu tapes — et F5 / Ctrl-R actualisent à la demande.

Déplace-toi avec / (ou k/j), exactement comme Vim.

🔬 3. Plonge — la boucle fondamentale est lire → plonger → agir

Place le curseur sur un dépôt et appuie sur Enter. Tu plonges dans le détail Git de ce dépôt : branche, SHA, statut de l’arbre de travail, log récent, diffstat, remotes. Appuie sur Esc (ou b) pour remonter d’un niveau.

C’est le rythme de tout le cockpit : lire la grille → plonger dans une chose → agir dessus → ressortir. Tu n’es jamais à plus d’une touche du détail ou de l’action.

⌨️ 4. Agis sur la flotte depuis la rangée de repos

Des touches uniques sur la ligne du curseur font des choses. Les essentielles :

ToucheFait
ssync — les dépôts marqués s’il y en a, sinon le dépôt sous le curseur, sinon la stack
fparcourir les fichiers du dépôt — disque local ou directement depuis la forge
xbasculer dans un shell dans ce dépôt (quitte le cockpit)
!lancer une commande (exec) dans le dépôt, dans sa vue de détail
/filtrer la grille en direct de façon floue — /knl restreint à kernel
pvue problèmes uniquement — seulement les dépôts qui demandent de l’attention
Spacemarquer / démarquer le dépôt sous le curseur ()
rrun une commande — sur les dépôts marqués s’il y en a, sinon toute la flotte
ggoto — quitter et afficher le chemin du dépôt sous le curseur (cd "$(haw dash)")

Le git-fetch, le changement de stack et le lock ont migré vers la barre de commande — :fetch, :stack (sélecteur) ou :stack NAME, et :lock. Une touche que tu utiliseras partout est a — le menu d’actions. Il ouvre une petite popup listant exactement les actions que la vue courante prend en charge, chacune avec sa propre sous-touche ; choisis-en une et toute action d’écriture (fusionner, atterrir, …) te demande quand même y/n d’abord. Les vues sans action te le disent tout simplement.

Astuce : Les marques sont le super-pouvoir du cockpit. Appuie sur Space sur quelques dépôts, puis s (sync) ou r (run) agit sur ce seul ensemble. C’est comme ça que tu réalises une opération chirurgicale sur la flotte sans toucher à un manifeste.

🌐 5. Les vues réseau — PR, CI et agir dessus

Changer de vue tient en une touche : les chiffres 17 sautent directement vers une vue depuis n’importe quelle liste de premier niveau. Les vues réseau se chargent à la demande (rien ne touche le réseau tant que tu ne le demandes pas) :

ToucheVuealias :
1flotte:fleet
2changesets:changesets
3PR/MR — toutes les PR/MR ouvertes à travers la flotte:prs
4runs CI — runs récents, progression en direct:ci
5arbre:tree
6gouvernance — plugins, SBOM, conclusions:governance
7plugins:plugins

Dans les vues PR/MR (3) ou CI (4), Enter plonge dans le détail — les relecteurs et les checks d’une PR, ou les jobs et la progression en direct d’un run CI. Appuie sur d pour lire le diff d’une PR, l pour les logs d’un run CI, et f pour parcourir les fichiers modifiés d’une PR. (Un log CI que la forge a périmé — GitHub renvoie 410 — s’affiche honnêtement comme « logs indisponibles — expirés ou vides » plutôt que comme une erreur.)

Pour agir, appuie sur a pour le menu d’actions. Dans la vue PR/MR, il propose :

Sous-toucheFait
mfusionner la PR/MR sur sa forge
aapprouver la PR/MR
ccheckout la branche de la PR en local

Chaque écriture est protégée par une confirmation y/n pour que tu ne fusionnes jamais par erreur de doigt. o ouvre la ligne sous le curseur dans ton navigateur. Ainsi tout le flux inter-forges du chapitre 5 — voir les PR, approuver, fusionner — est ici même, au clavier uniquement, le tout sous a.

📂 6. Parcourir fichiers & branches — n’importe quelle ref, locale ou forge

Appuie sur f sur n’importe quel dépôt pour ouvrir son navigateur de fichiers — une vue en lecture seule (il ne stage ni ne committe jamais, il lit seulement). Trois touches le transforment en véritable explorateur de code :

ToucheFait
Tbasculer entre la liste plate à un seul répertoire ⇄ un arbre navigable (/ pour déplier/replier, /Enter déplier, replier)
rsélecteur de ref — choisis une branche ou un tag dans la liste, ou tape n’importe quel SHA ; la vue se recharge à hauteur de cette ref et l’en-tête affiche @ <ref>
eéditer le fichier sous le curseur dans ton $EDITOR (fichiers locaux uniquement)
Rbasculer entre le disque local ⇄ la forge

La récompense : avec r tu peux lire un fichier tel qu’il existe sur n’importe quelle branche du remote — à travers GitHub, GitLab ou Bitbucket — sans rien checkout. Pointe vers la branche feature/x d’un collègue, lis le fichier directement depuis l’API de la forge, et ne touche jamais à ton arbre de travail. e est la seule exception à la lecture seule : il remet le fichier à ton éditeur pour une correction locale rapide, puis recharge la liste.

💬 7. La barre de commande — un seul langage pour la CLI et la TUI

Appuie sur : pour ouvrir la barre de commande (la palette de commandes). Ses verbes reflètent la CLI que tu as déjà apprise, et la ligne de statut renvoie la commande exacte que chacun lance — ainsi le cockpit sert aussi de moyen de découvrir la CLI :

:sync              sync the current stack
:grep TODO         fleet-wide grep
:switch platform   switch to another stack
:change land FEAT-42
:theme nord        change the skin live

Apprends-en une, connais les deux. :name amène aussi le curseur sur un dépôt par son nom.

🎨 8. Deux vues de plus, et les thèmes

  • 7 (:plugins) — la vue Plugins : chaque plugin disponible (les clés [plugins] du manifeste réunies avec les exécutables haw-* sur ton PATH) ; Enter en lance un et affiche sa sortie dans un panneau. Tu en construiras un qui atterrira ici au chapitre 8.
  • :errors (:err) — la vue Errors : un journal déroulant des échecs de cette session, pour qu’une erreur passagère ne disparaisse jamais du défilement avant que tu aies pu la lire.

Thèmes. Sept habillages intégrés — classic, catppuccin (par défaut), dracula, nord, gruvbox, solarized, monochrome. classic est un habillage neutre en ANSI standard qui se lit aussi bien sur les terminaux clairs que sombres. Tape :theme sans argument pour ouvrir un sélecteur interactif (j/k pour se déplacer, Enter pour appliquer) ; l’habillage choisi est appliqué en direct et enregistré dans ta configuration. :theme nord change toujours directement. Définis-en un au démarrage avec HAW_THEME=nord haw, et NO_COLOR force monochrome.

Personnalise-le — ~/.config/haw/config.toml. Optionnel et tolérant (un fichier absent ou partiel utilise simplement les valeurs par défaut). Définis un thème de démarrage, l’éditeur de la touche e, un en-tête replié et la cadence de rafraîchissement au repos — en plus de remapper un sous-ensemble sûr de touches d’action :

[ui]
theme = "classic"        # startup skin
editor = "nvim"          # the `e` key's editor ($VISUAL/$EDITOR still win)
compact_header = false   # start with the one-line header
refresh_secs = 5         # idle auto-refresh cadence (2–60)

[keys]                   # remap: sync, goto, run, shell, files, problems, watch
sync = "s"

Les sélecteurs écrivent ce fichier pour toi : :editor (sans argument) liste les éditeurs de ton PATH, et :compact bascule l’en-tête replié — chacun persiste ton choix. Les globales gelées (j, k, :, /, ?, q, b, space, g, w, chiffres) ne peuvent pas être réassignées ; un remap invalide est ignoré avec une note au démarrage, et les indices de l’en-tête montrent toujours la touche réellement active.

Appuie sur ? à tout moment pour l’aide en surimpression, et q (ou Ctrl-C) pour quitter.

Astuce : Chaque action lourde tourne sur un worker en arrière-plan, donc l’interface ne se fige jamais pendant qu’une synchro, un fetch ou un appel à la forge est en cours. Continue de naviguer.

🙌 À toi de jouer

Aucun espace de travail ni réseau nécessaire — le contrôleur de démo a tout ce qu’il faut pour bricoler :

  • Lance haw dash –demo. Déplace-toi avec /, puis appuie sur Enter pour entrer dans un dépôt et Esc pour revenir — ressens le rythme lire → entrer → agir → revenir.
  • Appuie sur Space pour marquer deux ou trois dépôts (regarde le ), puis / pour filtrer la grille en fuzzy. Appuie sur 3 pour les PR et 4 pour la CI, puis a pour voir le menu d’actions. Appuie sur ? pour l’aide en surimpression.
  • Appuie sur f sur un dépôt pour parcourir ses fichiers, puis T pour l’arborescence et r pour lire un fichier à une autre branche ou tag. Appuie sur b pour revenir.
  • Appuie sur : et tape :theme nord. Le thème change en direct — et la ligne de statut affiche la commande exacte, si bien que le cockpit t’apprend la CLI au fur et à mesure.

✅ Récapitulatif

  • haw seul (ou haw dash --demo) ouvre le cockpit — un haw status vivant sur lequel tu peux agir.
  • La boucle est lire → plonger (Enter) → agir → revenir (Esc).
  • Touches de la flotte : s sync, f fichiers, x shell, ! exec, / filtrer, p problèmes, Space marquer, r run, g goto, a actions.
  • Les sauts de vue sont les chiffres 17 : 1 flotte, 2 changesets, 3 PR, 4 CI, 5 arbre, 6 gouvernance, 7 plugins. Dans les PR/CI, a (actions) fait fusionner/approuver/checkout (protégé par confirmation), d diff, l logs, f fichiers de la PR.
  • Navigateur de fichiers (f) : T bascule l’arbre, r choisit une branche/tag/SHA (lire n’importe quelle ref, locale ou forge, sans checkout), e édite en local, R bascule entre local ⇄ forge.
  • : est une barre de commande (palette) qui reflète la CLI ; :plugins et :errors atteignent ces vues ; sept thèmes (dont classic) via :theme / HAW_THEME, un sélecteur interactif :theme/:editor, et un ~/.config/haw/config.toml pour les thèmes, l’éditeur, les options d’affichage et les raccourcis personnalisés.

👉 La suite

Tu as vu tout le cockpit lire la flotte. Passons maintenant au mouvement signature qu’il pilote — livrer une fonctionnalité à travers plusieurs dépôts comme un seul changeset coordonné → 5. Les changesets à travers les dépôts.