%%Présentation de Emacs le 30/2/2001, club GPL, INSA de Lyon
%%Par Thomas Tempé
%%repris et redaté pour une présentation à Linux-Arverne le 19/11/2003
%%Par Thomas Tempé



\documentclass[a4paper, twoside, indentfirst, french]{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}

\begin{document}
\title{Une courte introduction à Emacs}
\author{Thomas \textsc{Tempé}}
\date{Le 30 janvier 2001}
\maketitle


\section*{Introduction}

Emacs est l'\'editeur de texte de toutes les légendes. Il est l'oeuvre
de Richard Stallman (initiateur de la Free Software Foundation (FSF)
et du projet GNU) et de nombreux contributeurs. Il est d'abord apparu
en 1975 au MIT, comme un ensemble de macros pour l'éditeur Teco
(aujourd'hui disparu), d'où son nom, contraction de <<\textsl{Editing
  Macros}>>.

Aujourd'hui, Emacs est un projet titanesque, dont les installations
représentent couramment de l'ordre de 50Mo de code. Il est construit
autour d'un interpréteur de E-Lisp (une variante du langage
fonctionnel Lisp) écrit en C. L'éditeur lui-même est très largement
 écrit en E-Lisp, et sa conception modulaire a permis le développement
d'un grand nombre de modules (modes, applications et autres) écrits en
E-Lisp. Emacs emploie également largement les expressions régulières.

Il existe plusieurs branches de développement de Emacs. La plus connue
et celle que nous utiliserons s'appelle GNU Emacs, qui en est
actuellement à la version 21.3. La seconde plus connue, également
disponible dans la plupart des distributions de Linux, s'appelle
X-Emacs (qui n'a rien à voir avec le support X-Window. Les deux
peuvent fonctionner avec ou sans support X. Lancer Emacs avec l'option
\texttt{-nw} pour qu'il s'exécute sans support X). Il existe aussi une
ribambelle de versions développées pour certaines plates-formes, comme
Windows ou AmigaOS...

\section{Ce qu'Emacs est, et n'est pas}

Emacs n'édite que des fichiers texte, sans formatage particulier.
Impossible de souligner ou de mettre en gras. Cette tâche revient à
des traitements de texte (OpenOffice.org) ou des processeurs typographiques
(LaTeX).

Les fichiers texte (typiquement appelés <<fichiers ASCII>>, mais qui
peuvent être écrits avec divers jeux de caractères) sont utilisés dans
un très grand nombre d'application, et Emacs peut s'interfacer avec
des outils comme les compilateurs, shells, processeurs de documents,
ou correcteurs orthographiques.

Emacs est en fait plus qu'un éditeur de texte. C'est un environnement
de travail complet. Il gère de multiples documents (buffers), de
multiples fenêtre, offre une interface utilisateur cohérente, et peut
contenir des applications élaborées, comme des clients mail, ftp,
news, ou web.


\section{Premi\`ere prise en main}

Démarrons Emacs avec la commande \texttt{emacs truc}, ce qui a pour
effet de créer le fichier \texttt{truc}, et de l'ouvrir. L'écran est
divisé en quatre zones: les menus déroulants (accessibles avec F10),
la zone de saisie, la barre d'état, et le mini-buffer (dernière
ligne).

La barre d'état indique si le fichier en cours a été modifié
(\texttt{**}) ou est accessible en lecture seule (\texttt{\%\%}), son
nom, le mode d'édition, et la ligne en cours.

Un nouveau fichier, \texttt{truc}, a été créé par Emacs. Tapons
quelques lignes de texte. Emacs n'est pas un éditeur modal, comme Vi,
ce qui le rend moins effrayant au premier abord.

Sauvons maintenant nos modifications. En maintenant la touche
\texttt{contrôle} enfoncée, appuyons successivement sur \texttt{X} et
sur \texttt{S}. Un message s'affiche dans le mini-buffer. Le fichier
est sauvé.

\section{Les raccourcis clavier}

Les premières versions d'Emacs ont été développées avant même
l'apparition des interfaces graphiques. L'interface utilisateur
principale est le clavier. Son apprentissage permet d'interagir avec
le programme beaucoup plus efficacement qu'avec une souris.

Les raccourcis clavier sont obtenus en gardant enfoncée soit la touche
contrôle (C-x), soit la touche alt, appelée \textsl{meta} (M-x) (La
touche meta est parfois autre chose que alt, notamment dans les
versions Windows de Emacs, ou elle est remplacée par echap). Voyons
ici une première liste de raccourcis utiles:

\begin{itemize}
\item \textbf{C-x C-s} sauve le fichier en cours;
\item \textbf{C-x C-w} sauve sous un autre nom;
\item \textbf{C-x C-f} \textsl{find file}: ouvre un nouveau fichier, ou le crée s'il n'éxiste pas;
\item \textbf{C-x i} insert le contenu d'un fichier existant à la position du curseur;
\item \textbf{M-x} saisit une commande dans le mini-buffer.
\end{itemize}

Le mini-buffer est utilisé pour inter-agir avec Emacs, par exemple
pour taper le nom d'un fichier à ouvrir ou à sauver. On peut aussi y
taper le nom de commandes Emacs. Les raccourcis clavier Emacs ne font
en fait qu'appeler les commandes qui y sont liées. Par exemple, on
peut aussi sauver le fichier en cours avec \texttt{M-x save-buffer}.

\section{Comment se déplacer dans le texte}

Emacs est optimisé pour l'édition de fichiers très volumineux. Comme
les développeurs ont mieux à faire de leur temps que de garder le
doigt sur les touches de direction en attendant que le texte défile,
il existe des moyens de se déplacer rapidement dans le texte:

\begin{itemize}
\item \textbf{Page Up, Page Down} déplacent le curseur d'une page vers le haut ou le bas;
\item \textbf{Home, End} l'amènent au début ou à la fin du fichier;
\item \textbf{les flèches de direction, C-f, C-b, C-p, C-n} déplacent le curseur d'une lettre ou d'une ligne;
\item \textbf{C-flèches, M-flèches, M-f, M-b, M-p, M-n} le déplacent d'un mot ou d'un paragraphe;
\item \textbf{C-a, C-e, M-a, M-e} le mettent au début et à la fin de la ligne, ou du paragraphe en cours;
\item \textbf{C-l} rafraîchit l'écran, et place la ligne portant le curseur au milieu.
\item \textbf{C-v, M-v} affichent la vue (page) suivante et précédente. Si deux fenêtre sont visibles à la fois, C-M-v fait défiler le texte dans la fenêtre inactive.
\end{itemize}

Ne négligez pas, à terme, d'apprendre les raccourcis clavier basés sur f
(forward), b (back), p (previous), et n (next). Ils peuvent vous faire
gagner un temps considérable.

Notez également que souvent, les même combinaisons de touches utilisées avec C- et M- font des choses similaires.

\section{La recherche}

La recherche de texte est également un bon moyen de se déplacer dans
un long texte, car elle est très rapidement accessible par les
raccourcis clavier.

\textbf{C-s} et \textbf{C-r} permettent de faire une recherche incrémentale (en
avant et en arrière), c'est-à-dire au fur et à mesure que l'on saisit.
On peut aussi faire des recherches par expressions régulières
(\textbf{M-x search-forward-regexp, M-x search-backward-regexp}). La
touche Entrée termine la recherche, et l'appui répété sur C-s ou C-r
la reconduit autant de fois que nécessaire.

\textbf{M-x replace-string} permet de remplacer une chaîne avec une
autre, et \textbf{M-x query-replace-string} demande une confirmation
avant chaque remplacement.


\section{Facilités d'édition}

Le mini-buffer bénéficie d'un système de complétion automatique, et
d'une historique. Par exemple, tapez \textbf{M-x y Tab Tab} pour voir
la liste des commandes commençant par y. Si vous saisissez ``o'' puis
Tab à nouveau, la commande ``yow'' s'affiche en entier. Entrée
l'exécutera. \textbf{M-x flèche vers le haut} rappelle la commande
précédente. Ceci est aussi valable pour les noms de fichiers, ou pour
les phrases à remplacer.

Pour arrêter l'action en cours, on utilisera \textbf{C-g}. On peut
aussi répéter une commande autant de fois qu'on le veut avec
l'\textsl{argument universel} \textbf{C-u nombre} ou \textbf{M-nombre}
. Par exemple, \textbf{C-u 9999 C-b} a de fortes chances de vous
ramener au début du fichier. \textbf{C-u 80 *} vous remplira une ligne
de petites étoiles.

Il est possible d'anuller une commande ou modification avec
\textbf{C-/} (\textbf{M-x undo}). On peut ainsi
revenir en arrière de manière presque illimitée, sur les modifications
qui ont eu lieu dans la session courante.

\section{Le copier-coller}

\textbf{C-d, M-d, M-backspace} suppriment la lettre ou le mot
suivant ou précédent, et \textbf{C-k et M-k} suppriment la ligne ou le
paragraphe suivant. 

Toute suppression de plusieurs lettres à la fois sauve automatiquement
ces lettres dans ce que l'on appelle le \textsl{kill ring}. Il est
alors possible de les rappeler avec \textbf{C-y} (\textsl{yank}), et
de consulter tout le kill ring avec \textbf{M-y}. Le kill ring
contient par défaut les vingt derniers morceaux de texte supprimés. 

Il existe aussi des ``registres'', ou presse-papier nommés, auxquels
on peut accéder avec \textbf{copy-region-to-register ou C-x r x, et 
insert-register ou C-x r g}. Voir le paragraphe sur la marque.

\section{Les modes}

Saisissez une longue phrase sans retour à la ligne. Vous constaterez
qu'elle est affichée sur plusieurs lignes, mais pas coupée en
deux. Ceci est intéressant pour la programmation, où les retours à la
ligne peuvent avoir un sens, mais moins pour les textes, où les
longues lignes peuvent être tronquées par certains programmes à
l'affichage. Tapez maintenant  \textbf{M-x auto-fill-mode}. Le
mot ``fill'' s''ajoute dans la barre d'état. Saisissez à nouveau une
longue ligne. Remarquez comme elle est coupée en deux quand elle
devient trop longue.

Revenez au début de la première ligne, et ajoutez quelques lettres. La
ligne n'est pas re-formatée. Pour forcer le re-formatage du
paragraphe en cours, tapez \textbf{M-q}. 

Il édite deux types de modes, les modes majeurs et les modes
mineurs. On n'est jamais que dans un mode majeur à la fois, qui
dictera le comportement général de l'éditeur. On peut par contre
activer plusieurs modes mineurs simultanément. Chacun modifiera l'un
ou l'autre aspect du mode majeur.

Il est possible de changer de mode en tapant dans le mini-buffer, le
nom du mode suivi de ``-mode''. Par exemple, \textbf{M-x c-mode} fait
passer en mode C. Le fait d'ouvrir un fichier .c fait le même
effet. Le mode C surligne les parenthèses que l'on referme, et indente
proprement la ligne en cours lorsqu'on appuie sur Tab.  On peut
désactiver un mode mineur en re-tapant son nom dans le mini-buffer.


\section{Les buffers et les fenêtres}

Chaque fichier ou texte de documentation est représenté par un
buffer. Emacs peut ouvrir plusieurs buffers simultanément (\textbf{M-x
list-buffers} ). On peut passer d'un buffer à un autre avec
\textbf{C-x b}, puis en tapant ou choisissant le nom du buffer
voulu. \textbf{C-x s} permet de sauver tous les buffers
ouverts. \textbf{C-x k} ou \textbf{kill-buffer} ferme le buffer en
cours.

Chaque buffer peut être affiché dans une ou plusieurs fenêtres. Pour
créer une deuxième fenêtre, tapons \textbf{C-x 2}. Une deuxième barre
d'état apparaît au milieu de l'écran. On a maintenant 2 zones de
saisies, permettant de visualiser le même fichier. Chaque ensemble \{
zone de saisie, barre d'état \} représente une fenêtre. Les
modifications apportées dans l'une se reportent dans
l'autre. \textbf{C-x o} permet de passer de l'une à l'autre. On peut
maintenant changer le buffer visible dans chacune des fenêtre, pour
éditer deux fichiers dans le même écran. On peut aussi scinder chaque
fenêtre en deux, horizontalement avec \textbf{C-x 2} ou verticalement
avec \textbf{C-x 3}. On re-collera 2 fenêtres ensemble avec
\textbf{C-x 0}. Pour revenir à un affichage avec une seule
fenêtre, on tapera \textbf{C-x 1}. Enfin, on peut modifier la taille des
fenêtres avec \textbf{M-x enlarge-window} et ses amis.

\section{La marque}

La marque est une sorte de signet qui peut être placé n'importe où
dans un buffer, avec le raccourci \textbf{C-espace}. On peut échanger
la position de la marque et du curseur avec \textbf{C-x C-x}. La
marque est aussi placée automatiquement à la position actuelle
lorsqu'on appuie sur home, end, lorsqu'on fait une recherche ou qu'on
colle (\texttt{yank}) un morceau de texte. Ceci permet par exemple de
revenir rapidement là où on en était quand on se déplace au début du
fichier par erreur (fréquent sur les claviers de portables).

La zone comprise entre le curseur et la marque est appelée une
région. De nombreuses commandes Emacs s'appliquent à la région,
notemment \textbf{C-w} et \textbf{M-w}, qui coupent et copient
respectivement la région dans le kill ring. 

\section{Les macros clavier}

Les macros sont des suites de touches que l'on enregistre, puis que
l'on peut répéter plusieurs fois. On Démarre l'enregistrement avec
\textbf{C-x (} ou \textbf{ M-x start-kbd-macro }. On réalise ensuite
une action, par exemple, rechercher (C-s) la prochaine occurrence du
mot ``cyber-papy'', et la remplacer par ``concombre masqué''. On
arrête ensuite l'enregistrement avec \textbf{C-x )} ou \textbf{M-x
end-kbd-macro}. On peut maintenant l'exécuter à nouveau, soit avec
\textbf{C-x e} soit avec \textbf{call-last-kbd-macro}.  On peut aussi
taper \textbf{name-last-kbd-macro}, et saisir un nom pour notre macro
(par exemple ``concombre''). On pourra alors l'appeler avec
\textbf{M-x concombre}. Attention cependant, les macros ainsi créées
ne sont pas sauvegardées automatiquement.

\section{La correction orthographique}

Elle n'est pas proposée directement par Emacs, mais par ispell (ou
aspell), qui sont des outils génériques de correction orthographiques
typiquement installés par défaut sur toute machine Linux. Voir la
documentation de ispell pour installer les bons dictionnaires par
défaut.

Les commandes \textbf{ispell-word, ispell-region, ispell-buffer}
permettent de corriger un document en cours. On peut aussi utiliser le
mode mineur \textbf{M-x flyspell-mode} pour réaliser la correction au
vol (comme sous Word;). Ispell a cependant parfois du mal avec les
accents...

\section{\`A l'aide!}

Emacs possède un système de documentation assez impressionnant. Vous
pourrez consulter la documentation de plusieurs manières, en général à
partir du raccourci \textbf{C-h} suivi d'une lettre. Les fen\^etres d'aide 
contiennent des liens hypertexte, qui permettent un minimum de navigation.
\begin{itemize}
\item \textbf{C-h ?} donne la liste des rubriques d'aide;
\item \textbf{C-h a} permet d'effectuer une recherche par mots-clef dans les noms de commandes;
\item \textbf{C-h c} nomme la fonction appel\'ee par un raccourci particulier, et 
\item \textbf{C-h f} donne la description d'une fonction dont on conna\^it le nom;
\item \textbf{C-h w} donne directement la description compl\`ete de la fonction appel\'ee par un raccourci...
\item\textbf{C-h l} montre les 100 derni\`eres touches appuy\'ees;
\item \textbf{C-h m} affiche la documentation des divers modes majeurs et mineurs actuels.
\end{itemize}
Les personnes int\'eress\'ees trouveront \'egalement de l'aide sur les diff\'erentes m\'ethodes de saisie (pour les jeux de caract\`eres \'etrangers) un tutoriel, et une liste des diff\'erentes fa\c cons de dire ``bonjour'' dans le monde.


\section{Les commandes utiles ou amusantes}

Nous avons maintenant fait le tour des concepts les plus importants de
Emacs. On pourrait en citer d'autres, comme les abréviations, les
packages, ou l'agenda (diary). Il ne vous faudra que peu de temps pour
vous familiariser avec elles. 

La coloration syntaxique est proposée par le \textbf{M-x
font-lock-mode}. Il est aussi possible de recourir à la complétion
automatique lors de la saisie de texte avec \textbf{M-x
dabbrev-expand} et \textbf{M-x dabbrev-completion}, disponibles avec
les raccourcis \textbf{M-/} et \textbf{C-M-/}.

Emacs sauvegarde automatiquement les fichiers ouverts dans des
fichiers tels que \texttt{truc\~ } ou \texttt{\#truc\#}. Il est
possible de récupérer un tel fichier avec \textbf{M-x
recover-file}. Emacs se transforme en gestionnaire de fichiers quand
on lui demande d'ouvrir un répertoire. Et pour les malvoyants, on peut
utiliser \textsl{emacspeak} pour prononcer le texte affiché.

Emacs permet également d'envoyer du courrier électronique (pour peu
qu'un serveur mail soit installé sur la machine) avec \textbf{C-x m}.
L'application Gnus (\textbf{M-x gnus}) est un client usenet
complet. Il existe aussi un client mail intégré, un client ftp
(\textbf{ange-ftp}), un support CVS, un mode permettant d'exécuter un
shell dans une fenêtre emacs (M-x shell), des commandes permettant la
compilation (\textbf{M-x compile}), un calendrier (\textbf{M-x
calendar}) permettant de connaître la date dans le calendrier
étiopien, chinois ou inca \textbf{M-x
calendar-chinese-date-string}. Enfin, le jeu de la vie est disponible
avec \textbf{M-x life}, les citations de Zippy avec \textbf{M-x yow}, 
le psychologue avec \textbf{M-x doctor}, et la rencontre des grands 
esprits avec \textbf{M-x psychanalyze-zippy}.


\section*{Conclusion}

Emacs est un outil fantastique. Nous n'avons ici qu'effleuré la
surface de ses fonctionnalités. Peu de gens peuvent prétendre connaître
entièrement Emacs; mais avec quelques jours d'entraînement, on arrive
très vite à enrichir son répertoire de raccourcis, et à gagner en
productivité. Au fur et à mesure, on découvre de nouvelles
fonctionnalités, de nouvelles commandes, de nouveaux raccourcis, et on
intègre de nouveaux réflexes qui, à chaque étape, nous font gagner
quelques secondes ou fractions de seconde par opération. Finalement,
couplé avec des outils comme LaTeX ou gcc, Emacs permet de rédiger un
compte-rendu ou de débugger un programme beaucoup plus rapidement, et
surtout avec un bien plus grand confort d'utilisation. 

Emacs est donc l'un de ces outils qui deviennent peu à peu
indispensables, irremplaçables, et font paraître fade toute
alternative.



\vspace{2cm}
Ce document est accessible sur \texttt{http://www.alysse.org/tom/2003\_emacs/} 
  \tiny{
    Copyright 2001 \textcopyright{} Thomas Tempé.\\
    
    Permission est accordée de distribuer et modifier ce document selon
    les termes de la licence \textsl{GNU Free Documentation Licence}
    dans sa version 1.1 ou postérieure, telle qu'elle est publiée par la
    \textsl{Free Software Foundation}.
  }

\end{document}


%% Si la ligne ci-dessous est présente, le Makefile de Qualif
%% détecte automatiquement que ce fichier est un fichier principal
%% à compiler. 
%% Ne la copiez pas dans les fichiers que vous incluez.
%%
%%                 <<COMPILEZ-MOI>>


