GAZETTE N°27: EMACSulation

EMACSulation

Par Eric Marsden

Adaptation française : Éric Jacoboni


Précédent Suivant Table des Matières

1. EMACSulation

Cette rubrique explique comment tirer le meilleur parti d'Emacs, ce merveilleux éditeur de texte. Dans chaque numéro, je présenterai une extension d'Emacs qui augmentera votre productivité, l'ensoleillement et la belle couleur verte de l'herbe.

1.1 ediff : une interface de diff et patch pour Emacs

Ne lisez plus jamais cette sortie de diff !
Appliquez les patchs interactivement !
Fusionnez facilement !

ediff est un paquetage puissant, écrit par Michael Kifer, qui permet de naviguer à travers les différences entre les fichiers et les répertoires, de fusionner les fichiers qui ont été revus par ceux qui travaillent avec vous et d'appliquer des patchs de façon interactive. Commençons par son utilisation la plus simple : la mise en évidence des différences entre deux versions d'un fichier texte. Tapez M-x ediff, ou choisissez Tools -> Compare -> Two Files à partir du menu d'XEmacs. ediff vous demandera les noms de deux fichiers à comparer, les ouvrira et « réfléchira » un peu (le temps de lancer diff en tâche de fond). Emacs ouvrira alors une petite fenêtre de contrôle et affichera quelque chose comme ça :

Comparaison de deux fichiers

(pour les curieux, le gestionnaire de fenêtre est une version légèrement modifiée du presque minimal wmx de Chris Cannam). Les zones différentes -- ou « hunks » dans le jargon diff -- des deux fichiers sont grisées pour être mises en évidence et vous pouvez les parcourir une à une en tapant n (next) ou p (previous) dans la fenêtre de contrôle. Le hunk actif est coloré et les mots qui diffèrent sont affichés dans une couleur différente (ce traitement est appelé « raffinage » et est réalisé par Emacs et non par diff). Naturellement, ediff fonctionne mieux sous un système de fenêtrage, mais est utilisable en mode dégradé sur un terminal en mode texte.

Vous pouvez utiliser vos affectations de touches dans les deux tampons comparés ; les commandes spécifiques à ediff doivent être saisies dans la fenêtre de contrôle. Pour obtenir de l'aide, tapez ? dans cette fenêtre, cela fera apparaitre une rassurante fenêtre d'aide comme celle ci :

Fenêtre d'aide d'ediff

1.2 Fusion de fichiers

ediff peut vous aider à fusionner deux fichiers pour en produire un troisième, un peu comme les commandes en ligne sdiff et merge. Tapez M-x ediff-merge pour entrer dans le mode fusion et entrez les deux noms de fichiers qui vous sont demandés. Le cadre Emacs sera alors divisé en trois parties : les deux fichiers à fusionner seront côte à côte dans les fenêtres appelées, respectivement, A et B et situées au dessus d'un tampon contenant le résultat de leur fusion. Cela devrait ressembler un peu à ça :

Fusion de fichiers.

La largeur normale de votre cadre Emacs peut être un peu juste pour faire tenir deux fichiers côte à côte, vous pouvez alors taper m pour élargir ce cadre.

Vous pourrez alors choisir, pour chaque hunk, le fichier qui fait autorité (i.e. la version à inclure dans la fusion). Tapez a pour choisir la version du tampon nommé A, b pour l'autre et + pour inclure les deux (vous pourrez ensuite éditer le tampon résultant de la fusion). Vous pouvez aussi fusionner des fichiers en fonction d'un ancêtre si, par exemple, deux personnes ont modifié un original commun.

1.3 Patching interactif

Venons-en à l'une des utilisations les plus amusantes d'ediff : l'application interactive d'un patch avec le confort apporté par Emacs. Plus de lecture des diffs « à la main », plus de bricolages avec les rejets. Tapez M-x ediff-patch-file pour lancer la fête et il vous sera demandé un nom de fichier patch et un nom de fichier à patcher. Le cadre d'Emacs sera divisé verticalement avec le fichier original au dessus et le fichier patché en dessous. Vous passez de hunk en hunk comme pour un diff et vous pouvez restaurer de façon sélective certaines régions du fichier original (annuler des parties du patch) en tapant a.

ediff s'intègre aussi très bien aux interfaces vers les outils de contrôle de version/configuration d'Emacs, ce qui permet de comparer les différentes versions d'un fichier. Ouvrez un fichier sous le contrôle de version (Emacs détecte cela automatiquement) et tapez M-x ediff-revision : il vous sera demandé les deux numéros de version à comparer. ediff vérifiera les deux versions et lancera diff sur celles-ci. Cette intégration bien ficelée s'étend aux fichiers distants et compactés : vos patchs peuvent être compactés ou sur une machine distante, ediff s'occupera de tout. Vous pouvez même (non testé !) appliquer un patch distant compressé sur une ancienne version d'un fichier compressé sur une autre machine.

Je n'ai décrit que les utilisations les plus courantes d'ediff : il peut aussi comparer trois fichiers (ediff3), comparer des tampons, des contenus de répertoires, et appliquer des patchs multi-fichiers. De nombreux aspects peuvent être personnalisés. ediff dispose d'un enregistrement de ses sessions courantes utile si vous êtes un utilisateur intensif. La documentation en ligne offre tous les renseignements nécessaires.

For they have entertained cause enough
To draw their swords. But how the fear of us
May cement their divisions, and bind up
The petty difference we yet not know.
Be't as our gods will have't! It only stands
Our lives upon to use our strongest hands.
William Shakespeare, Antoine et Cléopatre

1.4 Réactions

Quelques personnes m'ont signalé que ffap n'est pas inclus avec les deux Emacs, ainsi que je le prétendais dans l'article du mois dernier, mais seulement avec GNU Emacs. Les utilisateurs d'XEmacs peuvent obtenir la dernière version sur le site FTP de Michelangelo Grigni (son auteur). J'ai aussi attribué à tort un message de Christopher B. Smith à un autre utilisateur Linux, Christopher B. Browne ; mes excuses aux deux Christopher.

1.5 La prochaine fois...

Le mois prochain, je traiterai d'emacsclient/gnuserv, un mécanisme permettant d'envoyer des instructions à un processus Emacs. N'hésitez pas à me contacter et à m'envoyer vos commentaires, corrections ou suggestions (quel est votre paquetage « je-ne-pourrais-vivre-sans » favori pour Emacs ?). C-u 1000 M-x hail-emacs !

PS : Emacs n'est, en aucune manière, limité à Linux, puisqu'il existe des implantations pour un grand nombre d'autres systèmes d'exploitation (certaines fonctionnent assez mal). Cependant, en tant qu'un des logiciels phares du mouvement pour le logiciel libre, l'un des plus puissants, complexes et paramétrables, je pense qu'il a sa place dans la Linux Gazette.


Précédent Suivant Table des Matières

Copyright (c) 1998, Éric Marsden - paru dans le numéro 27 de la Linux-Gazette

Adaptation française : Éric Jacoboni