Emacs est un éditeur de texte, c'est-à-dire un logiciel capable de faciliter la manipulation (saisie et modification) de données textuelles. Il ne s'agit pas d'un logiciel de « traitement de texte » puisqu'il n'est pas possible d'effectuer une mise en page visuelle du document en cours d'édition. Il est cependant possible d'exploiter un logiciel dédié à cette tâche (par exemple, TeX) depuis Emacs.
Il offre une réelle (quoique discrète) efficacité plutôt qu'une engageante apparence. On n'y trouve que peu ou pas de superbes icônes et le premier contact s'avère souvent déconcertant, mais le rendement assuré après une période d'apprentissage reste inégalé.
L'édition de texte, selon les concepteurs d'Emacs, constitue le plus gros de l'activité de nombreux utilisateurs d'ordinateurs. L'immense majorité des applications reposent en effet sur un principe proche de l'énoncé classique selon lequel « l'utilisateur introduit des informations grâce au clavier, l'ordinateur les traite et affiche le résultat ».
Ils conçoivent par conséquent Emacs de façon à offrir de solides fondations sur lesquelles chacun peut bâtir des applications complètes (messagerie, Usenet, émulation de terminal, manipulation de fichiers ...).
Un vaste ensemble de fonctions livrées avec Emacs, souvent rédigées dans un dialecte du langage LISP appelé « Emacs LISP » (« elisp »), constitue ces fondations.
Une « fonction » est un groupe cohérent d'instructions manipulant des données en vue de produire un résultat. Chacune porte un nom unique et offre un service donné, simple ou non. Certaines permettent par exemple de déplacer le curseur, d'autres de chercher du texte, d'autres encore d'ouvrir des fenêtres graphiques, de télécharger un fichier depuis un site FTP, de lire son courrier et les news Usenet ...
L'apprentissage des conventions Emacsiennes (par exemple les combinaisons de touches) permet des gains en rendement, tant sur le plan qualitatif que quantitatif, car sont communes à tous ses modes de fonctionnement (lecture du courrier, édition d'un source de programme ou d'un document ...).
L'exécution d'une fonction est indifféremment désignée ici par « évaluation » et « appel ». L'utilisateur peut, grâce à diverses combinaisons de touches ("sequences"), « appeler » ces fonctions Lisp.
La notation C-caractère, sous Emacs, correspond au classique Control-caractère. La casse (majuscule ou minuscule ?) de la touche associée à « Control » n'importe pas, de sorte que C-X et C-x sont équivalentes.
À TOUTE action effectuée par Emacs correspond l'exécution d'une ou plusieurs fonctions elisp. Une combinaison spéciale permet à l'utilisateur d'appeler une fonction en fournissant simplement son nom. Mais cela implique de mémoriser les noms et rôles des fonctions ...
Ce mode opératoire fastidieux ne convient guère qu'aux fonctions rarement employées, les plus utilisées seront donc appelées grâce à des touches simples. Appuyer sur la touche « flèche vers le haut », par exemple, oblige Emacs à appeler la fonction up qui place le curseur sur la ligne précédente. La touche « flèche vers le haut » est dite « associée » (on écrit souvent « liée ») à la fonction up.
Un Emacs en cours de fonctionnement, en réalité, est un interpréteur elisp (programme chargé d'exécuter des programmes rédigés en elisp) en train d'exécuter un programme ... qui est Emacs lui-même !
Le « programme Emacs » se résume en fait à une boucle :
Chaque combinaison de touches peut faire l'objet d'une association (« keybinding ») à une fonction elisp donnée. La configuration standard d'Emacs ou bien des paramètres fournis par l'utilisateur réalisent ces associations dont Emacs gère la liste afin de déterminer quelle fonction évaluer lorsqu'un événement donné (par exemple une combinaison de touches ou une action souris) se présente.
Considérons par exemple la fonction permettant de quitter correctement Emacs, appelée save-buffers-kill-emacs. Elle appartient au groupe des fonctions standard, présentes dans toutes les versions du logiciel, et se charge d'achever de façon sûre une session Emacs. La table d'association la « lie » à C-x C-c.
Lorsque le « programme Emacs » exécuté par l'interpréteur elisp reçoit cette séquence de touches il appelle la fonction correspondante (déclarée dans la table des associations) : save-buffers-kill-emacs. Cette dernière, comme son nom le laisse entendre, assure la sauvegarde les travaux en cours puis achève l'exécution d'Emacs.
Les gros bosseurs préféreront sans doute démarrer Emacs dès le début de la session de travail sous X11, par exemple grâce au  /.xinitrc ou bien aux fonctions de mise en place de l'environnement offertes par le gestionnaire de fenêtres.
Sous une interface graphique (par exemple X) La fenêtre présentée par Emacs juste après son démarrage contient une zone dans laquelle l'édition de texte est possible, appelée « tampon », elle-même inscrite dans un « cadre » (« frame ») où figurent menus, barre d'ascenseur et décorations.
L'avant dernière ligne affichée commence par ----- Emacs: *scratch* et constitue une sorte de tableau de bord appelé ligne d'état (« status line »).
Emacs doit parfois entrer en interaction avec l'utilisateur afin d'obtenir un paramètre, par exemple le nom du fichier à charger. La toute dernière ligne, appelée minitampon (« minibuffer »), est réservée à cet usage.
ATTENTION : Emacs place dans le minitampon (en ce cas appelé « echo area ») diverses informations de service (par exemple « Wrote nom-de-fichier » sitôt après sauvegarde sur disque du tampon). Il y pose aussi, si nécessaire, une question (par exemple le nom du fichier à charger), toujours suivie du caractère deux-points, et place en ce cas le curseur juste après le libellé de la question. De nombreux débutants négligent cette ligne et ne fournissent donc pas toujours les informations qu'Emacs leur demande lorsqu'ils utilisent certaines fonctions.
Voici une liste de conventions importantes (à mémoriser !) :
Astuce : grâce à VBAcs il est possible de disposer, sous MS-Word, de la plupart des combinaisons de touches classiques d'Emacs !
Sitôt Emacs démarré l'utilisateur peut commencer à saisir du texte dans le
tampon, donc dans la mémoire de travail. Le texte ne correspond à ce moment
pas au contenu d'un fichier sur le disque mais il faudra probablement tôt
ou tard l'y stocker. Ce tampon particulier porte le nom "*scratch*". La
combinaison C-x C-s requiert la sauvegarde, dans un fichier, du contenu du
tampon. Sitôt cette combinaison introduite Emacs affiche File to save
in: dans le minitampon puis y place le curseur de sorte que
l'utilisateur puisse composer le nom du fichier. La ligne d'état arborera
ensuite son nom en lieu et place du lapidaire *scratch* (nom par défaut des
nouveaux tampons).
ATTENTION : Pour interrompre l'exécution d'une fonction utiliser C-g, qui signifie « Emacs, je t'ordonne de stopper toutes les opérations en cours et de retourner à l'état neutre, où tu attends mes instructions». Expérimenter par exemple grâce à la combinaison C-x C-s, qui requiert la sauvegarde, puis C-g, qui avorte l'opération en cours. Ne jamais hésiter à recourir à cette fonction : l'utilisateur en perdition devrait toujours actionner C-g !
La combinaison C-h k ('h' comme "help" (aide) et 'k' comme "key" (touche)) fournit le nom de la fonction sur le moment associée à une combinaison de touches donnée. Pour la voir à l'oeuvre introduire par exemple C-h k puis C-x C-c (la combinaison elle-même, c'est-à-dire « Control x Control c »). Emacs divise le cadre en deux tampons et affiche dans l'un d'eux la documentation de la fonction associée à C-x C-c.
C-h f ('h' comme "help" (aide) et 'k' comme "fonction") permet d'obtenir la documentation associée à une fonction donnée. Note : les combinaisons au préfixe C-h mènent toutes à des fonctions d'aide. Après la saisie C-h f, Emacs requiert, dans le minitampon, le nom d'une fonction. Composer par exemple save-buffers-kill-emacs, puis valider grâce à la touche RET (« Entrée »). Sa documentation apparaît.
La touche TAB (« Tabulation »), utilisée dans le minitampon, assure un « complètement » (« completion ») cher aux utilisateurs de shells Unix. Plus explicitement : elle déclenche une recherche visant à déterminer l'argument adéquat. Le mode de recherche dépend du contexte, donc de la nature de l'entité attendue par la fonction utilisant sur le moment le minitampon (un nom de fichier, un nom de fonction Emacs ...) mais aussi du contenu du minitampon (des caractères saisis) et, le cas échéant, d'éléments externes (par exemple de l'existence d'un fichier).
Saisissez, sans valider grâce à RET, C-h f save-buffer. Puis appuyez sur TAB. Cela oblige Emacs à rechercher tous les noms de fonctions (puisque la fonction en interaction avec l'utilisateur, appelée par C-h f, accepte un nom de fonction Emacs) commençant par « save-buffer ». Il en existe plusieurs, Emacs affiche donc « Complete, but not unique ». Cela signifie qu'une fonction save-buffer existe, et que d'autres portent ces mots en guise de préfixe. Appuyer une nouvelle fois sur TAB. Un nouveau tampon apparaît, il contient la liste des noms de fonctions commençant par « save-buffer » : save-buffer et save-buffers-kill-emacs. Ajoutez au nom de la fonction fourni dans le minitampon un simple 's', puis appuyez à nouveau sur TAB. Ce caractère ajouté est discriminant, donc save-buffers-kill-emacs apparaît dans le minitampon, il suffit dès lors d'appuyer sur RET pour accéder au panneau d'aide de cette fonction ( en anglais, aucun francophone n'ayant eu le courage de traduire l'énorme documentation d'Emacs).
La combinaison C-h a réclame un mot-clé, grâce au minitampon, puis produit une liste de toutes les fonctions interactives (c'est-à-dire proposées à l'utilisateur et non uniquement à Emacs lui-même) dont le nom comprend ce mot.
La combinaison C-s appelle la fonction isearch-forward (incremental search forward : recherche incrémentale vers l'avant). Le minitampon affiche « I-search: » et Emacs recherche les caractères introduits, au fur et à mesure de leur saisie. La recherche incrémentale vers l'arrière (début du tampon) est associée à la combinaison C-r.
Diverses combinaisons de touches facilitent l'emploi de ces fonctions, parmi lesquelles :
Tâchons de trouver le nom de la fonction chargée d'insérer dans le tampon actif le contenu d'un fichier existant. Utilisons pour cela C-h a afin de chercher le mot-clé « insert ». Cela ouvre un tampon contenant les noms et descriptions condensées de toutes les fonctions dont le nom contient ce mot. Il suffit de se placer dans ce tampon puis de sélectionner (touche Entrée ("RET") ou avec la souris) puis d'employer C-s afin de chercher le mot « file ». On découvre ainsi rapidement que la fonction convoitée s'appelle « insert-file ».
Beaucoup de fonctions interviennent sur une « zone sélectionnée », un sous-ensemble appelé « region » du contenu du tampon. Qui désire détruire un pan complet du contenu d'un tampon, par exemple, pourra manoeuvrer la touche « Suppr » pour chaque caractère concerné mais préfèrera probablement indiquer au logiciel le premier caractère à détruire, puis le dernier, et enfin appeler une fonction de suppression. Cette approche par « region » ne concerne bien entendu pas que la destruction.
La sélection de région s'opère ainsi :
Attention :
D'autres éditeurs offrent des modes de sélection différents et mettent en valeur la région active par surbrillance, inverse vidéo ou colorisation. Emacs peut en faire autant mais sa configuration par défaut, de prime abord déroutante, assure une haute productivité. Les utilisateurs très rompus aux autres conventions emploieront les fonctions pc-selection-mode (sous XEmacs : zmacs-regions) et transient-mark-mode, qui obligent Emacs à tolérer les procédures de sélection communes sous certains environnements : par Control-flèches et avec mise en valeur de la « sélection ».
De nombreuses fonctions sont liées à des combinaisons basées sur la touche appelée « Meta », notée M-. Il s'agit souvent (en fonction du type et de la configuration de la machine et du terminal employés) de l'une de ces touches :
La combinaison M-x oblige Emacs à appeler une fonction qui demande le nom d'une fonction, les valeurs de ses arguments (si nécessaire), puis l'évalue. Exemple : poser le curseur sur un mot puis utiliser M-x upcase-word.
Commandes portant sur une région :
Pour détruire les mots "bonjour monde" on pourra :
Il est souvent utile de coller une zone de texte déjà copiée par le passé. Emacs maintient à cette effet une liste des derniers blocs copiés, appelée « kill ring ».
Après un collage M-w la combinaison M-y permet de remplacer l'élément ajouté par le précédent élément du kill ring. Appuyer autant de fois que nécessaire sur M-y pour « parcourir » le kill ring jusqu'à ce que la zone souhaitée apparaisse, puis continuer d'éditer normalement.
N'utiliser M-y qu'immédiatement après un collage. Toute combinaison distincte de M-y utilisée après cette dernière interrompt automatiquement la session d'exploration du kill ring.
La combinaison C-k (associée à la fonction kill-line) détruit tous les caractères placés après le curseur sur la ligne courante et les place dans le kill ring.
Détruire et modifier aussi facilement de vastes sections de texte pourrait coûter cher si aucune possibilité de renoncer aux dernières modifications opérées n'existait. La combinaison C-x u (« advertised-undo ») offre bienheureusement cet inestimable service.
Avec un tampon contenant les mots « un deux trois » :
Diverses combinaisons permettent de déplacer le curseur :
Il peut sembler étrange d'utiliser ainsi des combinaisons ou fonctions plutôt que les touches spéciales (fléchées) prévues à cet effet fonctionnent fort bien. Mais les dactilographes aguerris savent qu'il est nécessaire de diminuer le nombre de déplacements des doigts et surtout poignets afin d'améliorer le rendement.
Pour chercher et remplacer du texte utiliser la combinaison de touches associée à la fonction query-replace M-%. Pour chaque occurrence du texte à rechercher Emacs demandera, dans le minitampon (dernière ligne de la fenêtre) ce qu'il doit faire. Composer à ce moment C-h en cas de doute.
Il s'avère souvent utile de requérir la sauvegarde de tous les tampons actifs : C-x s (fonction save-some-buffers) se charge de cela.
Le mode de fonctionnement d'Emacs laisse l'utilisateur accumuler les tampons, voire l'y encourage. La combinaison C-x C-b engendre un tampon contenant une liste des tampons actifs.
Elle est présentée sous un « mode » spécifique, dont le nom apparaît dans la ligne d'état entre parenthèses (mot de le plus proche de la parenthèse ouverte). Emacs permet d'associer à tout type de document (source de programme, texte en français, panneau d'aide ...) un « mode » qui détermine entre autres les actions des touches et la présentation des informations. Sous le mode C, par exemple, chaque mot apparaît coloré en fonction de sa famille lexicale/syntaxique.
Utiliser la commande C-h m afin d'obtenir la liste des touches actives sous un mode donné. On distingue à ce niveau les modes majeurs et mineurs. Par exemple, pour éditer du texte, le mode privilégié est le text-mode. On entre dans ce mode en saisissant tout simplement M-x text-mode. Par défaut, la saisie se fait ligne par ligne, jusqu'à l'incontournable RET qui passe à la ligne suivante. Pour effectuer un semblant de mise en page, il est parfois pratique de passer à la ligne de façon automatique. On entre pour cela dans le mode mineur auto-fill-mode. Il suffit d'indiquer M-x auto-fill-mode. La ligne d'état indique "Text Fill", nous sommes donc dans le mode majeur text-mode et dans le mode mineur auto-fill-mode.
Emacs gère à merveille les outils offerts par le système sous-jacent. Sa fonction grep, par exemple, assure très exactement ce que l'on espère. Il suffit de lui fournir les arguments à communiquer au binaire grep installé sur la machine (options éventuelles, expression rationnelle à rechercher, puis le filtre de fichiers adéquat). Emacs invoque le binaire et traite le résultat de son examen afin de le présenter dans un tampon dont chaque ligne correspond à une occurrence et présente le nom de fichier où cette dernière se trouve ainsi que le numéro de la ligne et son contenu. Il suffit de placer le curseur sur l'une de ces lignes puis d'appuyer sur RET (Entrée) pour inviter Emacs à présenter un tampon contenant ce fichier (il le chargera, si nécessaire, au préalable) où le curseur se trouvera au début de la ligne concernée.
Pour évaluer une expression rédigée en Emacs Lisp (elisp) il suffit de la saisir, de placer le curseur juste après sa dernière parenthèse fermante puis d'utiliser C-x C-e. La fonction message permet par exemple d'afficher un message dans le minitampon. Saisir :
(message "bonjour, univers")
puis placer le curseur après la parenthèse fermante et composer C-x C-e
produira le résultat escompté. Emacs ne cesse d'évaluer ainsi des
expressions.
La fonction man gère l'accès au service d'aide d'Unix. global-set-key va nous permettre de l'associer à la combinaison de touches C-F1. Placer pour cela dans votre fichier  /.emacs une ligne contenant :
(global-set-key (read-kbd-macro "C-<f1>") 'man)
Cela obligera Emacs à évaluer, lors de chaque démarrage, la fonction global-set-key en lui passant deux arguments :
Le tout crée une liaison active sous tous les modes (globale) entre la combinaison de touches « Control F1 » et la fonction man.
read-kbd-macro n'est pas strictement nécessaire mais permet de noter n'importe quelle combinaison de touches de façon à la fois compatible avec toutes les versions récentes d'Emacs et simple, c'est-à-dire semblable à la façon dont elle apparaît sur les panneaux d'aide, par exemple ceux de C-h k. Seule astuce : la notation entre crochets est réservée aux touches de fonctions. Pour associer man à « Shift F1 » il faudrait par conséquent utiliser :
(global-set-key (read-kbd-macro "S-<f1>") 'man)
Emacs vous permet également de lancer un véritable shell grâce à M-x shell. Toutes les sorties des commandes sont alors récupérables on ne peut plus facilement dans les autres tampons. Explorer aussi le mode term.
Pour les plus branchés d'entre vous, signalons également le mode Telnet ( M-x telnet) qui permet d'ouvrir une session distante et d'échanger très facilement des informations avec les autres tampons.
Ce puissant outil vous propose pourtant une autre solution pour gérer votre système : le dired-mode que vous pouvez lancer avec C-x d. Emacs vous demandera alors d'entrer un nom de répertoire ( pour démarrer dans le répertoire courant, appuyez simplement sur RET). Le tampon affiche alors la liste des fichiers du répertoire sélectionné et comme dans tout gestionnaire de fichier qui se respecte, de nombreuses commandes sont disponibles. Le fichier sélectionné se trouve sous le curseur. Vous pourrez effectuer de nombreuses opération sur ce fichier :
Il est aussi possible de sélectionner un groupe de fichier et d'effectuer une opération commune sur cette sélection :
Lorsque des fichiers sont marqués (autrement que par d), les commandes concernent la sélection. Par exemple, pour déplacer tous les fichiers exécutables du répertoire courant, on pourrait écrire :
* R
Avec un peu d'habitude, dired pourrait bien vous faire changer d'avis sur la notion d'interface utilisateur !
Emacs permet de travailler avec de nombreux fichiers différents. Le problème, c'est que par défaut, un seul de ces tampons n'est visible à un moment donné. Il existe heureusement des commandes permettant de passer très simplement d'un tampon à un autre :
Un autre possibilité fort pratique consiste à partager l'écran principal en plusieurs écrans de plus petite taille. Les raccourcis clavier sont dans ce cas on ne peut plus simples :
Quand votre écran est trop chargé, n'oubliez pas C-x 1 !
Le très pratique C-x o permet ensuite de passer d'un tampon à l'autre.