16.5. Auto-Sauvegarde : Protection Contre des Désastres

Emacs enregistre tous les fichiers visités de temps en temps (basé sur le compte de vos pressions de touches) sans vous avertir. Ceci est appelé auto-sauvegarde. Ceci vous empêche de perdre une trop importante quantité de travail si le système crashe.

Lorsqu'Emacs détermine qu'il est temps d'auto-sauvegarder, chaque tampon est considéré et est auto-sauvegardé si l'auto-sauvegarde est effective pour ce tampon et qu'il a été modifié depuis la dernière auto-sauvegarde. Le message Auto-saving... est affiché dans la zone de répercussion lors de l'auto-sauvegarde, et tous les fichiers sont auto-sauvegardés. Les erreurs arrivant en cours d'auto-sauvegarde sont détournées pour qu'elles ne puissent pas interférer avec l'exécution des commandes que vous êtes en train de taper.

16.5.1. Fichier d'Auto-Sauvegarde

L'auto-sauvegarde n'enregistre pas dans les fichiers que vous visitez, car il peut être indésirable de sauvegarder un programme qui est dans un état inconsistant lorsque vous avez fait la moitié du changement souhaité. L'auto-sauvegarde est plutôt fait dans un fichier différent appelé fichier d'auto-sauvegarde, et le fichier visité est changé seulement lorsque vous demandez l'enregistrement (comme avec C-x C-s).

Normalement, le nom du fichier de sauvegarde est créé en ajoutant # au début et à la fin du nom du fichier visité. Ainsi, un tampon visitant le fichier foo.c est auto-sauvegardé dans un fichier #foo.c#. La plupart des fichiers ne visitant pas de fichiers sont auto-sauvegardés seulement si vous en fa^ites la demande ; lorsqu'ils sont auto-sauvegardés, le nom du fichier d'auto-sauvegarde est créé en ajoutant #% au début et # à la fin du nom du tampon. Par exemple, le tampon *mail* dans lequel vous tapez des messages à envoyer est auto-sauvegardé dans un fichier appelé #%*mail*#. Les noms des fichiers d'auto-sauvegarde sont créés de cette manière à moins que vous reprogrammiez une partie d'Emacs pour faire quelque chose de différent (les fonctions make-auto-save-file-name et auto-save-file-name-p). Le nom de fichier à utiliser pour l'auto-sauvegarde d'un tampon est calculé au moment où l'auto-sauvegarde est permise dans ce tampon.

Lorsque vous supprimez une partie conséquente de texte dans un long tampon, l'auto-sauvegarde est arrêtée temporairement dans ce tampon. Dans les cas où vous supprimez le texte accidentellement, vous pouvez trouver plus utile que le fichier d'auto-sauvegarde contienne le texte supprimé. Pour relancer l'auto-sauvegarde, enregistrez le tampon avec C-x C-s, ou utilisez C-u 1 M-x auto-save.

Si vous désirez que l'auto-sauvegarde se fasse sur le fichier visité, mettez la variable auto-save-visited-file-name à une valeur non nil. Dans ce mode, il n'y a aucune différence entre l'auto-sauvegarde et la sauvegarde explicite.

Le fichier d'auti-sauvegarde d'un tampon est effacé lorsque vous enregistrez le tampon dans le fichier qu'il visite. Pour empêcher ceci, mettez la variable delete-auto-save-files à nil. Le fait de changer le nom du fichier visité avec C-x C-w ou set-visited-file-name renomme le fichier d'auto-sauvegarde pour que son nom corresponde au nouveau nom du fichier visité.

16.5.2. Contrôler l'Auto-Sauvegarde

Chaque fois que vous visitez un fichier, l'auto-sauvegarde est lancée pour le fichier de ce tampon si la variable auto-save-default est non nil (mais pas en mode batch ; Chapitre 6). La valeur par défaut pour cette variable est t, ainsi la sauvegarde automatique est la pratique habituelle pour les tampons visitant des fichiers. L'auto-sauvegarde peut être lancée ou arrêtée pour chacun des tampons existants avec la commande M-x auto-save-mode. Comme les autres commandes de modes mineurs, M-x auto-save-mode lance l'auto-sauvegarde avec un argument positif, l'arrête avec un argument nul ou négatif ; sans argument, le comportement est changé de lancé à arrêté et inversement.

Emacs auto-sauvegarde au bout d'une certaine période, basée sur le nombre de caractères que vous avez tapé depuis la dernière auto-sauvegarde. La variable auto-save-interval spécifie le nombre de caractères entre les auto-auvegardes. La valeur par défaut est 300.

L'auto-sauvegarde est aussi déclenchée lorsque vous arrêtez de taper pendant un moment. La variable auto-save-timeout indique combien de secondes Emacs doit attendre avant de faire une auto-sauvegarde (et peut-être aussi une collecte d'ordures). (La période de temps est plus longue si le tampon courant est long ; ceci est une heuristique qui vise à ne pas vous perturber lorsque vous éditez de longs tampons, pour lesquels l'auto-sauvegarde prend un temps important.) L'auto-sauvegarde pendant des périodes d'inactivité accomplit deux choses : tout d'abord, elle assure que tout votre travail est sauvegardé si vous vous éloignez de votre terminal pour un moment ; ensuite, elle peut annuler quelques auto-sauvegardes lorsque vous êtes en train de taper.

Emacs fait aussi une auto-sauvegarde lorsqu'il détecte une erreur fatale. Ceci inclut tuer le processus Emacs avec une commande shell comme kill %emacs, ou déconnecter une ligne téléphonique ou une connexion réseau.

Vous pouvez demander explicitement une auto-sauvegarde avec la commande M-x do-auto-save.

16.5.3. Retrouver des Données d'après des Auto-sauvegardes

Vous pouvez utiliser le contenu d'un fichier d'auto-sauvegarde pour retrouver des données perdues avec la commande M-x recover-file RET fichier RET. Cette commande visite fichier puis (après votre confirmation) en restaure sle contenu d'après son fichier d'auto-sauvegarde #fichier#. Vous pouvez alors enregistrer avec C-x C-s pour placer le texte retrouvé dans fichier lui-même. Par exemple, pour retrouver le fichier foo.c depuis son fichier d'auto-sauvegarde #foo.c#, faites :

M-x recover-file RET foo.c RET
yes RET
C-x C-s

Avant de demander la confirmation, M-x recover-file affiche une liste du répertoire décrivant le fichier spécifié et le fichier d'auto-sauvegarde, pour que vous puissiez comparer leurs tailles et dates. Si le fichier d'auto-sauvegarde est plus ancien, M-x recover-file ne propose pas de le lire.

Si Emacs ou l'ordinateur crashe, vous pouvez retrouver tous les fichiers que vous éditiez depuis leurs fichiers d'auto-sauvegarde avec la commande M-x recover-session. Cette commande vous affiche d'abord une liste de sessions interrompues enregistrées. Déplacez le point sur celui de votre choix, et tapez C-c C-c.

Puis recover-session vous demande, pour chaque fichier qui était édité durant la session, s'il faut retrouver ce fichier. Si vous répondez y, elle appelle recover-file, qui fonctionne comme d'habitude. Elle affiche les dates du fichier et de son fichier d'auto-sauvegarde, et demande de nouveau s'il faut retrouver ce fichier.

Lorsque recover-session est terminé, les fichiers que vous avez choisi de retrouver sont présents dans des tampons d'Emacs. Vous devez alors les enregistrer. Seulement ceci--les enregistrer--met à jour les fichiers eux-mêmes.

Les sessions interrompues sont enregistrées pour de futures récupérations dans des fichiers appelés ~/.saves-pid-hostname. La portion ~/.saves de ces noms vient de la valeur de auto-save-list-file-prefix. Vous pouvez choisir d'enregistrer les sessions à un endroit différent en redéfinissant cette variable dans votre fichier .emacs, mais vous aurez aussi à redéfinir recover-session pour qu'il regarde dans ce nouvel endroit. Si vous mettez auto-save-list-file-prefix à nil dans votre fichier .emacs, les sessions ne sont pas enregistrées.