I. Introduction

Emacs est un éditeur de texte extrêmement puissant et complet. En général, il est mis en "compétition" avec l'éditeur vim disponible sous linux. Le but de cet article n'est pas de fournir un comparatif entre ces 2 géants du texte mais simplement de permettre au lecteur de se familiariser un peu plus avec cet outil.

Emacs est, en réalité, un interpréteur Lisp qui émule un éditeur de texte. Son développement a été initié par Richard Stallman le fondateur de GNU en 1984. Ainsi, l'éditeur a été écrit en C et il est possible d'étendre ses possibilités grâce au langage Emacs Lisp (bâti lui aussi à l'aide du langage C)

Les notions abordées dans cet article peuvent, en théorie, s'appliquer à partir de n'importe quelle version d'Emacs. Je tiens donc à préciser que la version utilisée pour la rédaction de cet article est la 22.1 sur linux (fedora).

Cet article va se dérouler en X phases : pour commencer, nous allons expliquer comment installer Emacs sous Windows et sous Linux. Ensuite, nous allons voir les raccourcis principaux et enfin nous allons présenter la notion de mode et les modes principaux.

II. Installation de Emacs

II-A. Installation sous Linux

Pour installer Emacs sous Linux, je vous laisse le soin d'utiliser la méthode standard liée à votre distribution. En règle générale, les dépôts généralistes possèdent les paquetages nécessaires.

Pour effectuer une installation à partir des sources, vous pouvez les télécharger ici. Vous pouvez vous aider du fichier INSTALL. En règle générale, la séquence suivante suffit :

  1. cd <répertoire d'emacs>
  2. ./configure
  3. make
  4. make install

II-B. Installation sous Windows

Emacs est aussi, malgré ce que l'on pourrait penser, disponible sous Windows. Je vous conseille de télécharger la version patchée présente ici

Il vous suffit de suivre les instructions de l'installateur. L'installation globale est la plus pertinente. Vous arrivez alors sur cet écran :

Image non disponible
gestion des associations

L'installateur vous laisse deux possibilités :

  • Aucune association de fichier n'est effectuée sauf les fichiers .el (emacs lisp)
  • Vous pouvez choisir les fichiers à associer (il s'agit de la liste d'extensions sur l'image ci-dessus). Ensuite l'installateur vous demandera confirmation sur les extensions à associer.

Vous pouvez terminer l'installation normalement avec l'installateur. Il reste une étape à faire soi-même : configurer la variable HOME. Il s'agit d'une variable d'environnement qui représente le répertoire où Emacs ira chercher son fichier de configuration (_emacs.el) sous Windows.

Le fichier de configuration est bien _emacs(.el) sous Windows. Il est possible d'avoir un fichier .emacs comme sous Linux, mais n'espérez pas le créer directement sous Windows car vous aurez alors le message suivant : "Vous devez spécifier un nom de fichier". Il considère cela comme une simple extension.

III. Présentation d'Emacs

III-A. Généralités

Emacs peut se présenter de deux manières différentes :

  • Une fenêtre graphique comme suit :
Image non disponible
présentation de Emacs
  • Une interface textuelle directement intégrée au terminal (très utile sous une installation minimale de linux) :
Image non disponible
interface textuelle d'Emacs

Une fenêtre Emacs peut se diviser en buffer visible ou non. Concrètement, il s'agit de fichiers ouverts qui seront affichés ou bien simplement mis en arrière plan. Voici une capture avec 5 buffers visibles :

Image non disponible
Emacs avec plusieurs buffers visibles

Un buffer principal ou plusieurs buffers principaux permettent d'éditer des fichiers alors que LE buffer de commandes permet de lancer des commandes spécifiques à Emacs

III-B. Les touches et raccourcis principaux

Dans cette partie, nous allons aborder les raccourcis qui sont spécifiques à Emacs et qui sont très différents de ceux utilisés généralement. Avant de lister les raccourcis, il faut aborder la différence entre la touche ctrl et la touche alt, pour les pcs, qui est appelé meta d'un point de vue généraliste.

La plupart des raccourcis associés à des manipulations du buffer principal, du texte ou du code proprement dit, sont accessibles à la touche ctrl.

Les raccourcis liés à l'environnement et aux modes, que nous verrons plus tard, sont accessibles via la touche meta.

III-C. Raccourcis via la touche ctrl

Voici la liste des raccourcis principaux accessibles via la touche ctrl. En général, ils sont notés sous la forme C+<touche>. Commençons par les raccourcis basiques :

Raccourcis Signification
C+<x> C+<c> Quitter l'application
C+<x> k Fermer le buffer
C+<x> f Ouvrir un fichier
C+<x> C+<s> Sauvegarder un fichier

Poursuivons maintenant avec les raccourcis spécifiques au texte :

Raccourcis Signification
C+<x> h Sélectionner la totalité du buffer
C+<w> Couper la région sélectionnée
C+<y> Coller ce qui a été copié ou coupé
C+<s> Effectuer une recherche dans le texte
C+<_> Annuler une modification

Pour obtenir plus de raccourcis spécifiques à la touche <ctrl>, il faut saisir la suite C+<x> C+<h> pour obtenir la liste fournie par Emacs.

III-D. Raccourcis via la touche meta

Comme indiqué précédemment, la touche meta varie d'un système à une autre : pour un pc, il s'agit de la touche alt, pour un mac, de la touche pomme.

La touche meta est rattachée de manière (très) générale à la notion de mode qui sera abordée plus loin. Néanmoins, elle permet d'accéder à quelques opérations utiles. Comme indiqué dans la partie précédente, la buffer de commande d'Emacs supporte la complétion (avec la touche TAB. Cela permet de pouvoir retrouver la commande facilement. Voici donc quelques commandes utiles avec la touche meta :

Raccourcis Signification
meta+<x> help Obtenir l'aide d'Emacs
meta+<x> <nom du mode> Lancer un mode emacs

IV. Emacs pour les programmeurs

IV-A. Une petite explication

Emacs est un outil très utile, surtout pour les programmeurs. Nous allons ici voir comment utiliser Emacs pour éditer vos codes sources dans votre langage favori. Nous n'allons pas rentrer dans les détails car le but de cet article est de permettre à l'utilisateur de prendre en main Emacs.

IV-B. Les modes et add-ons

Pour commencer, il faut introduire la notion de mode. Pour qu'Emacs soit le plus polyvalent possible, il est possible de le lancer sous une configuration précise suivant ce que l'on souhaite faire. Un mode permet une spécialisation temporaire d'Emacs : par exemple le mode nxml dédié aux codes XML, le mode C pour les codes C, ...

A la notion de mode se distingue la notion d'Add-on. En effet, il est possible d'accroître les possibilités de l'outil en lui greffant des modules dédiés à une cible précise mais indépendante de ce que l'on manipule. Par exemple l'outil de gestion de version CVS, ...

Certaines personnes ne font pas forcément la distinction, je n'y accorde donc que peu d'importance mais le concept à comprendre est que suivant le "type" de fichier ouvert, Emacs aura un comportement spécifique : la coloration syntaxique, l'indentation, ... tout ce qui est relatif au contenu du fichier est géré par le mode.

Comme vous le verrez plus loin, on peut considérer le buffer comme la virtualisation d'un fichier. Ainsi certains modes fonctionne sur la notion de buffer comme le mode ERC.

IV-C. Edition

L'édition d'un code source peut démarrer de 2 manières : soit on lance emacs avec, en arguments, le nom des fichiers; soit on ouvre un nouveau fichier. Dans le premier cas, le mode associé est en général automatiquement intégré à Emacs. En revanche, dans le second cas, et si le mode n'est pas lancé automatiquement, il faut le lancer manuellement grâce à la commande meta+x <nom du mode> (par exemple meta+x nxml-mode pour les fichiers xml).

Du mode lancé dépendent la coloration syntaxique, l'indentation, les raccourcis, ... En revanche, il faut savoir que Emacs n'est pas doté de l'auto-complétion au sens commun du terme (celle des mots clefs). En revanche, il permet d'effectuer de la complétion avec des mots présents dans les buffers ouverts (autrement dit, des mots déjà saisis dans les fichiers ouverts). Le raccourci de base pour la complétion est CTRL+x /

Il est possible d'ouvrir un mode qui ne soit pas associé directement au fichier : par exemple, au lancement je crée un fichier php mais dont le contenu ne sera que du html. Il est possible de lancer le mode html manuellement mais le mode php sera désactivé automatiquement. Pour mieux comprendre la distinction, voici des captures montrant un même fichier HTML ouvert avec plusieurs modes différents :

Image non disponible
Mode HTML
Image non disponible
Mode TEXT
Image non disponible
Mode PHP

Il est important de retenir que "du mode lancé dépend le comportement d'Emacs"

IV-D. Compilation

Emacs permet de compiler les programmes directement grâce à la présence de l'item "compile" dans le menu "tools". Emacs vous demandera alors la ligne de compilation à exécuter puis enfin ouvrira un buffer contenant les messages du compilateur

Je vous conseille de créer un makefile car Emacs lance par défaut la compilation via l'outil Make. De plus, cela vous permettra d'avoir un mode de compilation fiable et de ne pas ressaisir à chaque fois des lignes parfois fastidieuses. L'inconvénient est que le makefile doit se trouver dans le répertoire du buffer courant.

Voici un exemple de compilation avec Emacs (il s'agit d'un projet en C++) :

Image non disponible
Exemple de compilation avec Emacs

Plus intéressant, Emacs permet directement d'aller directement à la ligne ayant provoquer l'erreur de compilation ou bien le simple "warning". Pour cela, il vous suffit de cliquer sur le buffer contenant le résultat de la compilation puis de "naviguer dans les erreurs" grâce au menu "Compile". Ensuite cliquer sur le nom du fichier, Emacs se charge du reste :

Image non disponible
Exemple de Warning avec Emacs
x

IV-E. Debuggage

Emacs permet d'obtenir une "interface" à gdb (et toute la suite jdb, ...). Pour lancer cette interface, il faut sélectionner l'élément Debugger du menu Tools. Emacs vous demandera la ligne de commande permettant de lancer le debugger (par exemple : gdb <nom du programme à debugger>). Vous devriez obtenir une fenêtre ressemblant à ceci :

Image non disponible
Aperçu de l'interface pour debugger avec Emacs

Comme vous pouvez le constater, les principales commandes sont présents dans la barre d'icônes. Le seul défaut de cette interface est qu'elle ne fait qu'émuler GDB sans y apporter une certaine abstraction graphique (comme DDD par exemple), notamment pour affecter les points d'arrêts.Il vous reste donc 2 possibilités pour les placer :

  • manuellement dans le buffer contenant gdb avec la commande break;
  • en ouvrant le fichier, en allant à la ligne concernée et en effectuant la suite C+<x> <spac> (la barre espace !)

Dans tous les cas, lors du "run", le fichier où le point d'arrêt est positionné sera ouvert. Vous obtiendrez quelquechose comme ceci :

Image non disponible
Point d'arrêt avec Emacs

En fouillant dans le menu GUD, vous accéderez aux différentes possibilités du debugger(affichage de la pile d'appel, ...), mais je vous laisse aller tester cela.

V. Ce que Emacs peut faire de plus...

Dans cette dernière partie, nous allons voir ce que Emacs permet de faire en plus de la simple manipulation de texte ou de code. Evidemment, tout ne sera pas abordé. L'objectif de cette partie est simplement de donner un petit aperçu des possibilités de l'outil.

V-A. Emulation d'un terminal

Emacs permet d'intégrer un terminal émulé. Pour cela, après avoir saisi la suite meta-x saisissez la commande term. Emacs vous demandera le terminal que vous souhaitez émuler. J'ai choisi le terminal Bash et voici ce que l'on obtient :

Image non disponible
Aperçu d'un terminal émulé sous emacs

Pour pouvoir fermer le buffer du terminal, il faut quitter le terminal lui-même en premier. Evidemment, l'avantage d'une telle disposition est de pouvoir superposer le fichier que l'on souhaite visualiser et le terminal pour le manipuler comme suit :

Image non disponible
Aperçu d'un terminal et d'un fichier manipuler sous emacs

V-B. Naviguer sur internet avec Emacs

Je tiens à préciser avant toute-chose qu'Emacs ne propose pas un navigateur web comme Firefox ou Internet Explorer. Il s'agit d'un navigateur textuel comme le propose plutôt Lynx. La conséquence principale peut se voir directement sur la capture de mon espace personnel sur developpez.com sous Emacs :

Image non disponible
Aperçu d'un site avec Emacs

Certains peuvent se dire "pouaaah c'est moche !". Le but d'un tel navigateur est plus la rapidité et l'accessibilité : cela permet de pouvoir effectuer des "copier/coller" rapides sans avoir à changer d'application.

Pour naviguer sur internet vous devez utiliser le mode w3m. Vous pouvez accéder à votre page favorite en utilisant le raccourci : meta+<x> puis en tapant w3m ou bien w3m-browse-url. Le second cas vous demandera directement la page que vous souhaitez afficher. Emacs devrait ressembler à la capture précédente, sans compter la page et les couleurs qui vous sont propres (la personnalisation d'Emacs sera abordée dans un prochain article).

Vous savez maintenant comment naviguer de manière simple sur la toile avec Emacs. Pour plus de détails, je vous laisse le soin de vous reporter à cette page.

V-C. Aller sur l'IRC avec Emacs

Il existe un mode Emacs qui permet d'aller chatter sur l'IRC (Internet Relay Chat) : ERC. Pour le lancer, il suffit de saisir la suite meta+x puis "erc". Emacs vous demandera de saisir le serveur, le port, votre pseudo et enfin le mot de passe associé (qui est en général inexistant car il ne s'agit pas du mot de passe "nickserv"). Vous arriverez sur une fenêtre ressemblant à ceci :

Image non disponible
Connexion IRC sous Emacs

Via le menu ERC, vous pouvez joindre un chan ou bien vous identifier pour "nickserv". Vous arrivez alors sur une fenêtre représentant le chan comme suit :

Image non disponible
Chan IRC sous Emacs

V-D. Emacs et les images

Plus étonnant, Emacs permet d'afficher les images comme un visualisateur classique regardez :

Image non disponible
Emacs et les images

VI. Conclusion

Résumons ce que vous devez être capable de faire après la lecture de cet article :

  • Manipuler un texte simple avec Emacs (ouverture, édition, sauvegarde, recherche, ...)
  • Connaître les raccourcis élémentaires (fichiers, buffer, aide, ...)
  • Comprendre la notion de modes sous Emacs
  • Manipuler un code source ainsi que compiler et debugger un programme C/C++ avec Emacs
  • Comprendre qu'Emacs ne se résume pas à un simple éditeur de code ou de texte

En regardant ce résumé, on peut se rendre compte de la puissance d'Emacs. Cette puissance en a fait un outil incontournable sous Linux. Néanmoins, il souffre d'une difficulté d'accès due à la prédominance des outils Microsoft sur le marché et donc de leur ergonomie associée. A mon sens, ne pas vouloir utiliser Emacs à cause de cette différence équivaut à mettre de côté une approche qui peut se révéler plus adéquate et plus puissante que celle proposée par certains outils. (Ces remarques peuvent aussi prévaloir pour l'éditeur VI).

Ce tutoriel n'aborde sans doute qu'une infime partie de Emacs, je vous laisse donc le soin de découvrir les modes et composants qui vous seront utiles !

VII. Bibliographie (pour aller un peu plus loin....)

VIII. Remerciements

Je tiens à remervier Gorgonite, Ovh et Alp pour leur attention et leur relecture; Nicopyright, Farscape et Fearyourself pour leur soutien à toute épreuve. Je remercie plus particulièrement Dut qui a relu cet article de manière attentive pour en extraire les fautes d'orthographe.