# tmux

Tessera parle nativement le mode contrôle de tmux (`tmux -CC`) : fenêtres et
volets sont des éléments d'interface à part entière, pas un simple relais de
texte. Cela nécessite `tmux` installé sur le serveur.

## Pourquoi tmux

Avec une session adossée à tmux, le shell vit sur le serveur. Fermez Tessera,
perdez le Wi-Fi, passez au cellulaire, mettez l'appareil en veille — rien de
tout cela ne tue votre travail. Reconnectez-vous et vous êtes exactement là où
vous vous étiez arrêté.

## Attachement

Le mode de lancement **tmux automatique** s'attache à (ou crée) une session par
hôte au nom déterministe `tessera-XXXXXXXX`, retenu même après une
réinstallation de l'app. **tmux nommé** s'attache à un nom de session que vous
choisissez. Les deux se règlent par hôte dans
l'[éditeur d'hôtes](https://bambouville.com/docs/fr/connections/#modes-de-lancement).

Le nom déterministe fait que deux de vos appareils utilisant la même entrée
d'hôte arrivent dans la *même* session tmux — c'est ce qui rend le
[transfert d'une session](https://bambouville.com/docs/fr/continuity/) entre eux transparent.

Si tmux ne démarre pas, Tessera ne vous laisse pas attendre : un hôte sans tmux
installé, une session tmux qui échoue au démarrage ou des dotfiles qui font
déjà `exec tmux` à la connexion vous déposent tous dans un shell simple, avec
une bannière qui en nomme la raison (« cet hôte démarre son propre tmux à la
connexion — cette session est affichée comme un terminal simple »). Voir
[quand une connexion bloque](https://bambouville.com/docs/fr/connections/#quand-une-connexion-senlise).

## Fenêtres

Les fenêtres tmux apparaissent en onglets dans la barre supérieure de la
session, dans l'ordre des index. Un bouton **+** dans la barre ouvre une
nouvelle fenêtre ; quand il y a plus d'onglets que de place, une commande de
débordement liste toutes les fenêtres. Chaque onglet porte une commande de
fermeture, et les fenêtres se renomment depuis la palette **⌘K** — le nom est
partagé avec tous les clients attachés à la session.

| raccourci | action |
| --- | --- |
| **⌘T** | nouvelle fenêtre |
| **⇧⌘W** | fermer le volet / la fenêtre |
| **⇧⌘[** / **⇧⌘]** | fenêtre précédente / suivante |
| **⌘1** – **⌘9** | aller à la fenêtre 1–9 |

## Volets

Les volets sont de vrais volets tmux, pilotés par le mode contrôle.

| raccourci | action |
| --- | --- |
| **⌘D** | diviser côte à côte |
| **⇧⌘D** | diviser l'un au-dessus de l'autre |
| **⌘[** / **⌘]** | passer d'un volet à l'autre |
| **⇧⌘↩** | agrandir / réduire le volet |

![Une session tmux dans Tessera, avec trois onglets de fenêtre en haut et deux volets côte à côte : à gauche un shell affichant la sortie de git log, à droite htop en cours d'exécution.](https://bambouville.com/docs/assets/img/tmux-panes.png)

*Deux volets dans une même fenêtre tmux, avec les fenêtres de la session en onglets au-dessus. Chaque volet porte sa propre barre de titre et sa commande de fermeture.*


## Sur iPhone

S'attacher depuis un iPhone ne réorganise jamais votre disposition : divisions
et état de zoom restent tels que le plus grand écran les a laissés, et le
téléphone affiche un volet à la fois via le sélecteur. Voir
[tessera sur iPhone](https://bambouville.com/docs/fr/iphone/).

## Mosh + tmux

En mosh, le terminal tourne sur UDP tandis que les onglets tmux empruntent un
second canal SSH secondaire. Ce canal secondaire porte aussi la
[redirection de ports](https://bambouville.com/docs/fr/port-forwarding/#mosh-et-redirection) pour les hôtes
mosh — et le [véritable historique](https://bambouville.com/docs/fr/mosh/#véritable-historique).

## Cloches

C'est le câblage du mode contrôle de tmux qui permet à Tessera d'acheminer les
cloches du terminal vers les [notifications](https://bambouville.com/docs/fr/notifications/) — par fenêtre,
avec l'onglet qui sonne signalé.

## Pièges

- Les variables d'environnement et les extraits de démarrage ne s'exécutent
  qu'au démarrage de la session tmux. Après les avoir modifiés, fermez la
  session sur le serveur (`tmux kill-session`) pour prendre en compte les
  changements.
- S'attacher depuis Tessera et depuis un autre client en même temps fonctionne,
  mais les deux clients partagent les mêmes fenêtres — c'est tmux, pas un bug.
  Quand l'autre client est votre propre iPhone ou iPad, Tessera gère la
  concurrence avec tact — voir
  [reprendre la main](https://bambouville.com/docs/fr/continuity/#reprendre-la-main).
- Si la sortie semble coincée après de gros rafraîchissements, **⌘R** (iPad)
  force un réaffichage complet. Et si une session s'attache sans jamais
  s'afficher, Tessera le dit (« appuyez sur n'importe quelle touche pour le
  réveiller ») — votre première frappe fait apparaître l'écran.
