Les modes d'Emacs ont des comportements et des particularités que vous pouvez activer ou désactiver (et personnaliser bien sûr) pour une utilisation dans des circonstances particulières. Les modes sont ce qui fait qu'un éditeur (Emacs) est aussi performant pour l'écriture de documentation, la programmation dans une grande variété de langages (C, C++, Perl, Python, Java, et beaucoup d'autres), la création de pages personnelles, l'envoi d'E-Mail, la lecture des News, le suivi de vos rendez-vous, et même les jeux.
Les modes d'Emacs sont simplement des librairies de code Lisp qui étendent, modifient, améliorent Emacs d'une facon ou d'une autre.
Il existe deux types fondamentaux de modes disponibles : Majeur et Mineur. La distinction n'est pas la chose la plus facile à saisir tant que vous n'avez pas travaillé en activant et désactivant quelques uns d'entre eux, mais essayons d'en dresser une esquisse.
Un seul mode majeur peut être activé à un moment donné. Plusieurs modes mineurs peuvent être actifs en même temps. Les modes majeurs sont plutôt destinés à un langage ou une tâche spécifique, alors que les modes mineurs sont en géneral moins spécifiques et peuvent etre utilisés pour différentes tâches.
Cela peut sembler un peu abstrait, alors prenons un
exemple. Il existe un mode que j'utilise souvent
lorsque j'écris des fichiers textes. Il est appelé
text-mode. Ce mode a été conçu pour réaliser des
textes dans un format libre comme par exemple les fichiers
README. Il sait comment identifier des mots et paragraphes, et
généralement répond correctement au touches de navigation
classiques.
Lorsque j'écris un texte destiné à un humain, je
souhaite évidemment qu'il soit bien présenté. Les lignes par
exemple doivent par exemple être de longueur a peu près égale.
Pour automatiser les retours à la ligne, j'active simplement le
mode mineur auto-fill. Ce mode fait ``ce qu'il faut''
lorsque j'atteinds la fin de
la ligne. Le fait qu'il s'agisse d'un mode mineur signifie
qu'il peut être activé avec différents modes majeurs. Ma
notion de ``ce qu'il faut'' lorsque j'atteinds la
fin de la ligne est différente lorsque je suis en text-mode
ou en java-mode par exemple. Je ne
veux pas que mon code Java soit mis en forme comme un
simple texte en français. Mais je veux que les blocs de
commentaires du code Java soient mis en forme, eux ! Le mode
auto-fill est assez malin pour s'en rendre compte.
Les auteurs des nombreux modes d'Emacs ont réalisé un excellent travail en s'assurant que les fonctionnalités qui doivent être présentes en mode mineur soient effectivement des modes mineurs.
Si vous vous reportez à mon schéma de l'écran d'Emacs reproduite dans ce document, vous constaterez que la ligne de mode identifie le(s) mode(s) dans lequel Emacs se trouve. Dans notre présentation il s'agissait d'un mode qui s'appele ``Lisp Interaction''. C'est le mode par défaut. Il n'est en fait réellement utile que si vous souhaiter écrire du code Lisp (mais la majeure partie d'Emacs étant écrite en Lisp, pourquoi pas?)
Emacs est avant tout un outil conçu par un programmeur pour des programmeurs. Il existe des modes de haute qualité pour presque tous les langages de programmation auxquels vous pouvez penser (et même quelques uns auxquels vous ne penserez pas). Je n'en décrirai rapidement que quelques uns ici.
La plupart des modes de programmation partagent des caractéristiques communes. Traditionnellement, il gèrent une ou plusieurs des choses suivantes:
Et en plus, il y a quelques modes qui ne sont pas spécifiques à un langage particulier mais qui sont très pratiques lors de la réalisation de tâches communes à beaucoup de langages. Des choses du genre interfaçage automatique avec votre logiciel de gestion de version, ajout de commentaires automatique au code, création de Makefiles, etc...
Lorsque vous additionnez tous ces modes, et prenez en compte la maturité et la stabilité du code d'Emacs, convenez qu'il supporte aisément la comparaison avec d'autres environnements de développement commerciaux destinés à des langages tels que C++ et Java. Et, bien sûr, il est gratuit.
Du fait de la similitude de la syntaxe des langages
C, C++, et Java, un seul mode d'Emacs gère ces trois
langages (tout comme Objective-C et IDL). C'est un
paquetage mature et très complet inclus dans la
distribution d'Emacs. Ce mode est appelé
indifféremment cc-mode ou CC Mode.
Pour de plus amples détails ou pour télécharger une version récente, visitez http://www.python.org/emacs/.
En fait, il existe deux modes destinés à
l'édition de code Perl dans Emacs. Le premier est
appelé perl-mode (comme on pouvait s'y
attendre) et le second cperl-mode. Je ne sais
que peu de chose de leur histoire, et notamment pas
pourquoi ces deux modes existent (la documentation ne
le précise pas), mais il semblerait que le perl-
mode ait été le mode original pour l'édition de
code Perl sous Emacs. Il semble disposer de moins de
fonctionnalités que le mode cperl-mode et
reconnaît plus ou moins bien quelques particularités
de construction du langage Perl.
Personnellement, j'utilise et recommande le
cperl-mode qui semble être activement
maintenu et dispose de plus de fonctionnalités que je
n'en aurai jamais besoin. Vous trouverez la dernière
version ici :
ftp://ftp.math.ohio- state.edu/pub/users/ilya/emacs.
Mais ne me croyez pas sur parole. Essayez les deux et choisissez celui qui vous semble le meilleur en fonction de vos besoins.
Python (un autre langage de script très populaire) dispose également de son mode dans Emacs. Pour ce que j'en sais, il n'est pas distribué avec Emacs GNU mais il l'est avec XEmacs. Il s'exécute néanmoins dans les deux éditeurs.
Vous pouvez récupérer le python-mode sur
le site web officiel de Python
http://www.python.org/emacs/python-mode/.
Il existe de nombreux autres modes destinés à faciliter la tâche des programmeurs. Ils vous faciliteront la vie pour de nombreux travaux :
Et plus encore. Reportez-vous à la dernière section de ce document pour de plus amples informations sur la manière de trouver ces autres modes.
Les modes d'Emacs ne se limitent pas à l'écriture de code. Les personnes écrivant de la documentation (de n'importe quelle sorte) peuvent également bénéficier d'une large sélection de modes.
ispell) Les auteurs de nombreux types de documents ont
besoin de vérifier l'orthographe de temps en temps.
Si vous disposez d'ispell GNU vous
pouvez taper M-x ispell et la vérification se
lance sur le buffer courant. Si ispell rencontre des
mots qu'il ne connaît pas, il vous présente une liste
des remplacements possibles et vous laisse
sélectionner l'un d'entre eux (ou aucun). Il s'agit
d'une fonctionnalité équivalente à celles des
vérificateurs orthographiques de nombreux logiciels
commerciaux.
Il est possible d'utiliser ispell-change-dictionary afin de changer de langue
(il faut installer le dictionnaire adéquat !).
html-helper) S'il vous arrive d'écrire de temps en temps des
fichiers HTML (même fréquemment), essayez le mode
html-helper-mode. Il est disponible depuis
http://www.santafe.edu/~nelson/tools/ avec sa
documentation.
Comme le suggère son nom, , le mode html-helper-
mode facilite la tâche de personnes devant écrire
en HTML manuellement (la bonne vieille école).
tex-mode) Lorsque vous écrivez des documents en TeX, il est
souvent agréable de bénéficier de la mise en valeur
des caractères particuliers. tex-mode s'en
occupe pour vous.
Même si je n'écris guère plus directement en TeX, ce mode m'a été d'un grand secours pour rendre mes sources TeX un peu plus lisibles.
sgml-mode) Le document que vous lisez actuellement a été écrit
en SGML (et probablement converti au format que vous
êtes en train d'utiliser). sgml-mode gère
toutes les bases des documents SGML: validation,
surlignement, forward-tag, backward-tag, et bien
d'autres. C'est un des modes standards d'Emacs.
Bien sûr, il y a beaucoup d'autres modes destinés à vous rendre la vie plus facile. Voici juste un bref aperçu des plus courants:
vc) Le mode vc s'interface avec la majorité
des back-ends de contrôle de version (RCS, SCCS, CVS)
pour faciliter la recherche et l'archivage de
fichiers, le suivi des mises à jour, etc... C'est un
mode standard d'Emacs et sa documentation est intégrée à
celle d'Emacs.
Pourquoi passer sur une autre fenêtre ou console
virtuelle pour lancer quelques commandes shell? Faites-
le depuis Emacs, pas la peine de vous fatiguer :-)
M-x shell lancera un shell dans un buffer
d'Emacs. Vous pouvez réaliser dans ce buffer la
plupart des choses que vous pourriez faire sous un
prompt traditionnel (excepté le lancement de
programmes plein écran comme vi ou
pine).
C'est également un mode standard d'Emacs, et sa documentation est intégrée à celle d'Emacs.
Pourquoi passer dans une autre fenêtre ou console virtuelle pour lancer telnet ou FTP ? Faites-le depuis Emacs, inutile de vous fatiguer (Vous commencez à comprendre l'idée ?)
Tout comme on lance un shell depuis Emacs, faites
de même avec telnet et ftp. Essayez M-x
telnet ou M-x ftp pour le tester vous-
même. Reportez-vous à la documentation pour plus d'informations.
Pourquoi passer dans une autre fenêtre ou console virtuelle pour simplement consulter une page man ? Faites-le depuis Emacs et ne vous fatiguez pas (Promis, j'arrête).
Tout comme vous pouvez lancer un shell depuis
Emacs, vous pouvez lire les pages man. Essayez M-x
man pour le tester vous-même. Reportez-vous à la
documentation pour de plus amples détails.
Extrait de la documentation de ange-ftp :
Ce paquetage essaie de rendre l'accès aux fichiers et répertoires via FTP depuis Emacs aussi simple et transparent que possible.
Ce qui signifie que vous pouvez traiter les
fichiers d'une machine distante comme s'ils étaient en
local. Si vous avez besoin d'éditer le fichier d'un
ordinateur distant, demandez simplement son ouverture
(par l'utilisation d'une syntaxe pour son chemin
d'accès légèrement différente) et il prendra soin de
tous les détails liés à la connexion et au
rapatriement du fichier. Puis, lorsque vous
enregistrerez le fichier par C-x C-s,
ange-ftp interceptera l'enregistrement et
écrira le fichier sur la machine distante.
Il s'agit, encore une fois, d'un module standard de la distribution d'Emacs, et sa documentation est donc intégrée à celle d'Emacs.