7.4. Annuler des changements

Vous pouvez annuler tous les changements faits récemment dans le texte du tampon, dans une certaine limite. Chaque tampon enregistre ses changements individuellement, et la commande d'annulation s'applique toujours au tampon courant. Habituellement, chacune des commandes d'édition crée une entrée séparée dans l'enregistrement des annulations, mais certaines commandes comme query-replace créent plusieurs entrées, et des commandes très simples comme self-insert sont souvent regroupées pour rendre l'annulation moins assommante.

C-x u

Annule un groupe de changements -- habituellement, une commande (undo).

C-_

Même chose.

C-u C-x u

Annule un groupe de changements dans la région.

La commande C-x u ou C-_ est le moyen d'annuler. La première fois que vous appelez cette commande, elle annule le dernier changement. Le point se déplace à l'endroit où il se trouvait avant la commande qui a fait le changement.

Des répétitions consécutives de C-_ ou C-x u annulent les changements précédents, jusqu'à la limite des informations d'annulation disponibles. Si tous les changements sauvegardés ont été annulés, la commande d'annulation imprime un message d'erreur et ne fait rien d'autre.

Toute commande différente d'une commande d'annulation termine la séquence de commandes d'annulation. À partir de ce moment, les commandes d'annulation précédentes deviennent des commandes ordinaires, qui peuvent elles-mêmes être annulées. Ainsi, pour rétablir des changements que vous auriez annulés, tapez C-f ou une autre commande qui terminera en douceur la séquence d'annulation, puis tapez d'autres commandes d'annulation.

Ordinairement l'annulation s'applique à tous les changements effectués dans le tampon courant. Vous pouvez aussi utiliser l'annulation sélective, limitée à la région courante. Pour cela, spécifiez la région de votre choix, puis lancez la commande undo avec un argument préfixe (la valeur n'a pas d'importance) : C-u C-x u ou C-u C-_. Ceci annule le changement le plus récent dans la région. Pour annuler des changements supplémentaires dans la même région, répétez la commande undo (l'argument préfixe n'est pas nécessaire). Dans le mode de Marque Transitoire, toute utilisation de undo lorsqu'une région est active effectue une annulation sélective ; l'argument préfixe n'est pas nécessaire.

Si vous remarquez qu'un tampon a été modifié accidentellement, le meilleur moyen de le rétablir est de taper C-_ répétitivement jusqu'à ce que les étoiles disparaissent du début de la ligne de mode. À ce moment, toutes les modifications faites ont été annulées. Lorsqu'une commande d'annulation fait disparaître les étoiles de la ligne de mode, le contenu du tampon est identique à ce qu'il était lorsque le fichier a été chargé ou enregistré pour la dernière fois.

Si vous ne savez plus si vous avez changé le tampon délibérément, tapez C-_ une fois. Lorsque vous annulez le dernier changement, vous devriez voir plus facilement si c'était un changement intentionnel. Si c'était un accident, laissez-le annulé. S'il était délibéré, rétablissez le changement comme décrit précédemment.

Tous les tampons n'enregistrent pas les informations d'annulation. Les tampons dont le nom commence par un espace ne le font pas ; ces tampons sont utilisés en interne par Emacs et sont des extensions pour garder des textes que l'utilisateur n'a besoin ni de voir ni d'éditer.

Vous ne pouvez pas annuler un simple déplacement du curseur ; seuls des changements sur le contenu du tampon sauvegardent des informations d'annulation. Par ailleurs, certaines commandes de déplacement du curseur placent la marque, donc si vous utilisez ces commandes de temps en temps, vous pouvez revenir sur vos pas en parcourant la pile des marques (Section 11.5).

Lorsque les informations d'annulation pour un tampon deviennent trop importantes, Emacs abandonne les informations les plus anciennes de temps en temps (durant la collecte des ordures). Vous pouvez spécifier le volume d'informations sauvegardées en initialisant deux variables : undo-limit et undo-strong-limit. Ces valeurs sont exprimées en octets.

La variable undo-limit représente une limite souple : Emacs garde assez de données d'annulation pour remplir cet espace, et peut-être le dépasser, mais ne garde plus de données pour les commandes suivantes. Sa valeur par défaut est 20000. La variable undo-strong-limit représente une limite stricte : la commande qui fait dépasser les données de cette limite est elle aussi abandonnée. Sa valeur par défaut est 30000.

En regard des valeurs de ces variables, le changement le plus récent n'est jamais abandonné. Il n'y a donc aucun danger qu'une collecte d'ordure arrivant juste après un important changement vous empêche d'annuler ce dernier.

La raison pour laquelle la commande undo a deux touches, C-x u et C-_, définies pour l'exécuter, est qu'elle mérite d'avoir une touche simple, mais qu'il est difficile sur certains claviers de taper C-_. C-x u est une alternative que vous pouvez taper sans souci sur n'importe quel terminal.