Souba SOUBA

Ctrl+Z ne remonte pas le temps

Annuler ne défait pas ton geste. L'application empile chaque action avec son inverse, puis rejoue ce contraire — et certaines actions échappent définitivement à la pile.

56s · 27 juillet 2026 · 3 min de lecture

Ctrl+Z ne remonte pas le temps

En bref

Ctrl+Z ne rembobine rien. Chaque action que tu effectues est encapsulée dans un objet qui sait aussi se défaire, puis empilée. Annuler consiste à retirer la dernière de la pile et à exécuter son inverse. D'où deux conséquences que tout le monde a vécues sans les comprendre : le « refaire » qui s'évapore, et les actions qu'aucun raccourci ne rattrape.

Une pile, pas une machine à remonter le temps

L'implémentation classique porte un nom : le patron de conception Commande. Chaque action de l'utilisateur est transformée en objet qui contient tout le nécessaire pour l'exécuter — et pour l'annuler. Écrire un mot embarque de quoi l'effacer ; coller un paragraphe embarque de quoi le retirer ; changer une couleur mémorise l'ancienne. Ces objets s'empilent au fil de la session. Quand tu demandes une annulation, l'application retire le sommet de la pile et exécute son inverse. L'état d'avant n'est pas restauré depuis le passé : il est reconstruit dans le présent.

Ce qu'on imagine

  • Le logiciel rembobine
  • Il restaure une sauvegarde d'avant

La réalité

  • Il dépile la dernière action
  • Il exécute l'opération inverse

→ Annuler, c'est avancer d'un pas de plus — dans l'autre sens.

Deux piles, et une qui se vide

L'action annulée n'est pas détruite : elle bascule sur une seconde pile, celle du « refaire ». C'est ce qui te permet de revenir sur ton annulation. Mais si tu effectues une nouvelle action après avoir annulé, cette pile de refaire est vidée — l'historique alternatif que tu venais d'abandonner devient inatteignable. C'est le comportement standard, et il explique cette frustration que tout le monde a connue : le refaire soudainement grisé.

text
Tu tapes A, B, C        pile annuler : [A, B, C]   pile refaire : []
Ctrl+Z                  pile annuler : [A, B]      pile refaire : [C]
Ctrl+Z                  pile annuler : [A]         pile refaire : [C, B]
Tu tapes D              pile annuler : [A, D]      pile refaire : []   <- vidée
Une nouvelle action après une annulation efface le refaire.

Ce qui ne s'annule jamais

La pile ne connaît que ce qui reste à l'intérieur de l'application. Dès qu'une action franchit cette frontière — un message envoyé sur le réseau, une écriture validée sur le disque, une transaction confirmée en base — l'inverse n'existe plus. On ne peut pas dépiler ce qui est déjà chez quelqu'un d'autre. C'est une limite structurelle, pas un manque de fonctionnalité.

Le cas Gmail : un bouton qui n'annule rien

L'exemple est parfait, parce qu'il est sous les yeux de tout le monde. Le bouton « Annuler l'envoi » de Gmail ne va pas récupérer ton message dans la boîte du destinataire. Il ne le peut pas. Gmail retient simplement le message sur ses serveurs pendant une durée que tu choisis, puis l'envoie. Si tu cliques pendant ce délai, le message n'est jamais parti : il retourne dans tes brouillons. Passé la fenêtre, aucun rappel n'est possible.

5 à 30secondes

le délai d'envoi que Gmail applique pour rendre l'annulation possible

source : Gmail (paramètres)

La leçon de conception

Il existe deux façons d'offrir un retour en arrière : savoir défaire, ou savoir attendre. Quand l'action reste chez toi, on empile son inverse. Quand elle part ailleurs, la seule annulation possible consiste à différer le départ. Microsoft Outlook tente bien un véritable rappel de message, mais uniquement à l'intérieur d'une même organisation Exchange, et sans garantie de succès — ce qui confirme la règle plutôt qu'il ne l'infirme.

À retenir

  • Chaque action est encapsulée avec son inverse (patron Commande) puis empilée ; annuler exécute ce contraire.
  • L'action annulée passe sur une pile de refaire — vidée dès que tu effectues une nouvelle action.
  • Certaines applications utilisent des instantanés d'état (patron Mémento), plus simples mais coûteux en mémoire.
  • Ce qui a quitté l'application (envoi réseau, écriture disque, transaction validée) n'est plus annulable.
  • Le bouton « Annuler l'envoi » de Gmail ne rappelle rien : il retarde l'envoi de 5 à 30 secondes, 5 par défaut.

Sources · la preuve

  1. [01] Undo sending your mail Google · support.google.com Documentation officielle : période d'annulation de 5, 10, 20 ou 30 secondes.
  2. [02] Recall an Email with Undo Send University of Michigan IT · teamdynamix.umich.edu Source institutionnelle neutre : aucun rappel possible passé le délai.
  3. [03] The Command Pattern: How to Implement Undo/Redo in Your App Codezup · codezup.com Objet commande avec execute/undo, pile d'annulation et pile de refaire.
  4. [04] How Does Undo Work? Understanding the Mechanics Behind Ctrl+Z Sandeep Kella · medium.com Vidage de la pile de refaire lors d'une nouvelle action.
ctrl+zannulerundopatron commandepile

Aussi dans Shorts