[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ suivant ]


À la découverte de GNU Emacs
Chapitre 2 - Notions de base


2.1 Comment Emacs est construit

Le coeur d'Emacs est écrit en C et tout le reste en ELisp (Emacs Lisp). ELisp est un langage interprété[1], ce qui permet une très grande interactivité dans Emacs (on peut faire n'importe quoi en exécutant directement une simple ligne d'ELisp, il n'y a rien à compiler préalablement).


2.2 Les raccourcis claviers (key sequences)

Les raccourcis clavier, appelés key sequences dans Emacs et donc par la suite séquences de touches dans ce document sont constitués d'un éventuel préfixe et d'une combinaison de touches finale. Par exemple, la séquence de touches C-x 5 C-f (signifiant qu'il faut taper : Control-x, relâcher ces touches, taper 5[2], relâcher puis taper Control-f) est constituée du préfixe C-x 5 et de C-f (en fait, C-x est également un préfixe au sens d'Emacs ; pour plus d'informations sur le sujet, se reporter au GNU Emacs Lisp Reference Manual).

Les combinaisons de touches standard d'Emacs paraissent souvent incroyablement compliquées aux non-initiés ; la plupart sont en fait assez faciles à mémoriser grâce aux conventions pour l'utilisation des préfixes et aux choix des combinaisons de touches finales (comme h pour help) :

Certaines séquences de touches comportent ESC ou M- en leur sein. Sur la plupart des systèmes[3], on peut dans ce cas interpréter cette portion comme :

La touche Meta existe telle quelle sur les claviers de certaines stations de travail (Sun par exemple). Sous Linux, elle dépend de la configuration du serveur X (souvent, la touche Windows fait l'affaire). Sous Windows, il s'agit de la touche Alt[5]. Sous MacOS, je ne sais pas.

Les autres petits noms qu'Emacs donne aux touches sont en général transparents : TAB pour la touche tabulation, RET pour la touche Return (Enter), SPC pour la barre d'espacement, f1 et consorts pour les touches de fonction, left, right, up et down pour les flèches, etc.

Certains raccourcis clavier paraissent très pénibles à exécuter et sont à l'origine de critiques injustifiées de la part de certaines personnes qui ne connaissent pas Emacs (« combinaisons de touches impossibles, gna-gna-gna...»). Par exemple, quand on ne connaît pas, on pense que C-x C-s (séquence de touches permettant de sauvegarder le contenu du buffer courant -- cf. Buffers et fichiers, Section 2.4) ne peut pas être effectuée rapidement. C'est totalement faux car :

Si vous avez des problèmes avec C-s et C-q, sachez que la fonction enable-flow-control permet de basculer entre les fonctionnements suivants :

La FAQ d'Emacs (visualisable avec C-h F) traite de cette question plus en détail.


2.3 Fonctions et commandes

Le fonctionnement d'Emacs se fait au travers de fonctions écrites en ELisp ou en C. Celles que l'utilisateur appelle le plus souvent sont des commandes[6]. Elles peuvent être exécutées par M-x nom-de-la-commande.

Après avoir tapé M-x, on est invité dans le minibuffer (voir Le minibuffer et l'echo area, Section 2.8) à taper le nom de la commande. La complétion est bien sûr disponible (avec TAB) ; on peut taper la barre d'espace pour insérer un tiret (c'est plus pratique) ; enfin, si on sait qu'il n'y a qu'une commande avec le nom commençant par ce qu'on a indiqué dans le minibuffer, il suffit de taper RET pour compléter son nom et la lancer.

Il est important de noter que bon nombre de commandes, notamment parmi les commandes d'insertion de texte, interprètent le universal argument (argument spécifié après C-u) comme le nombre de fois à répéter la fonction « de base » de la commande. Par exemple, pour insérer 78 fois le caractère *, il suffit de taper C-u 7 8 * (si vous avez des problèmes, utilisez les chiffres de la partie principale de votre clavier -- pas ceux du pavé numérique).

Cette remarque prendra toute son importance au chapitre Les macros, Section 3.7, C-u x y z t C-x e permettant d'exécuter xyzt (nombre entier écrit en décimal) fois la dernière macro enregistrée...


2.4 Buffers et fichiers

Un buffer est une zone (en général en mémoire) dans laquelle on stocke quelque chose. Dans Emacs, le quelque chose est du texte[7], éventuellement colorisé. Chaque buffer dans Emacs a un nom unique qui permet entre autres de naviguer de l'un à l'autre.

Un buffer peut « visiter un fichier » (traduction littérale ; comprendre : être lié à un fichier) mais ce n'est pas obligatoire. Par exemple, les buffers *scratch* et *Messages* que l'on trouve par défaut dans Emacs après l'avoir lancé ne sont liés à aucun fichier.

Intérêt de chaque type de buffer :


2.5 Modes majeurs et mineurs

Chaque buffer doit obligatoirement être dans un mode dit mode majeur (major mode) qui définit la manière dont Emacs doit interagir avec l'utilisateur pour ce buffer (colorisation, séquences de touches, etc.). Souvent, les modes majeurs sont écrits pour éditer des buffers dont le contenu est dans un langage de programmation donné (exemples : c-mode, python-mode, shell-script-mode, sql-mode, etc.).

Parallèlement, un buffer peut être dans zéro, un ou plusieurs mode(s) mineur(s) (minor mode(s)) qui définissent une fonction particulière, a priori valable pour tout mode majeur. Par exemple, le mode mineur font-lock-mode assure (si le mode majeur lui fournit les indications suffisantes) la colorisation d'un buffer ; l'auto-fill-mode permet quant à lui (entre autres) de taper « au kilomètre » en ayant un texte qui ne dépasse pas un nombre de colonnes choisi par l'utilisateur.

Tout mode, majeur ou mineur, peut être activé (et désactivé, s'il s'agit d'un mode mineur) par M-x nom-du-mode. Bien sûr, activer un nouveau mode majeur pour le buffer courant désactive son mode majeur précédent.

Le mode Fundamental est le mode majeur le plus primitif, le plus simple d'Emacs. C'est le mode par défaut dans une configuration standard. Dans ma configuration, le mode par défaut pour un nouveau buffer est le mode Text, sauf si les mécanismes[8] pour déterminer le mode adéquat à l'ouverture d'un fichier en indiquent un autre.


2.6 Windows et frames

Un processus (programme) Emacs peut afficher plusieurs fenêtres en même temps sans consommer autant de ressources que si l'on avait lancé autant de fois Emacs. De plus, ces fenêtres partagent tout ce qui constitue la session Emacs (variables globales, buffers ouverts, etc.). Dans la terminologie d'Emacs, ces fenêtres sont appelées frames (littéralement : cadres).

Emacs sait aussi diviser verticalement et horizontalement le contenu d'une frame en plusieurs parties appelées windows dans la terminologie Emacs. Ce terme étant particulièrement trompeur (ces parties ne sont pas des fenêtres comme on les conçoit habituellement sur une interface graphique), il sera utilisé en italique dans tout ce document pour éveiller la vigilance du lecteur. Chaque window peut contenir un buffer. Plusieurs windows peuvent contenir le même buffer, ce qui permet d'examiner différents endroits d'un buffer sans se déplacer sans cesse.


2.7 La ligne de mode (modeline)

La ligne de mode est la ligne, souvent affichée en vidéo inverse, que l'on retrouve au bas de chaque window. Elle affiche beaucoup d'informations utiles relatives au buffer qu'elles contiennent, entre autres, en standard :


2.8 Le minibuffer et l'echo area

Il s'agit simplement du tout petit buffer (en général réduit à une seule ligne[10] situé en bas de chaque frame. Il est utilisé pour effectuer des saisies lors de l'exécution de nombreuses commandes.

La window où l'on voit le minibuffer est également utilisée pour faire parvenir de nombreux messages à l'utilisateur. Il ne s'agit pas de saisie, cette fois-ci, mais seulement d'affichage. On dit que ces messages sont affichés dans l'echo area (littéralement : zone d'écho, i.e., selon une vieille tradition de nomenclature informatique, zone où sont affichés de courts messages). Les plus récents de ces messages peuvent généralement être consultés dans le buffer *Messages*, ce qui est bien pratique puisque l'echo area ne peut afficher que le dernier message (et celui-ci disparaît dès que l'on presse une touche).

Notez que l'on peut, sauf dans des cas très particuliers comme avec la recherche incrémentale[11], utiliser dans le minibuffer les mêmes touches de déplacement ou d'édition (copier/coller par exemple) que dans un autre buffer. Ainsi, on se rendra vite compte qu'il est très pratique pour corriger une saisie dans le minibuffer d'utiliser :


2.9 Point, cursor : quelle différence ?

Le mot point revient très souvent dans Emacs. Il représente une position particulière dans un buffer : celle où seront insérés les prochains caractères (sauf utilisation de fonctions d'insertion particulières, bien sûr). Sa signification est donc très proche de celle de curseur. Les principales différences sont :

Cette distinction, que le débutant peut ignorer sans prendre beaucoup de risques, est détaillée dans le GNU Emacs Manual à la section Point.


2.10 Mark, region, quesako ?

La marque est simplement un objet qui repère un endroit dans chaque buffer (il y a donc une marque par buffer). Elle permet de faire beaucoup de choses, notamment le copier/coller. L'utilisateur peut la déposer où bon lui semble avec C-SPC (nous y reviendrons plus tard -- voir Déplacements, Section 3.5.1).

Ceci permet non seulement de revenir par la suite à cet endroit avec un simple C-x C-x mais sert aussi à délimiter implicitement une zone de texte appelée region et définie comme étant l'ensemble des caractères compris entre le point et la marque (le point peut être avant ou après la marque dans le buffer, cela n'a aucune importance).

Certaines fonctions, notamment des fonctions qui risquent de déplacer le point loin dans le buffer, posent une marque au début de leur exécution pour permettre un retour rapide à l'endroit d'où elles ont été appelées. Elles l'indiquent en général dans le minibuffer par « Mark set » ou un message analogue.


[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ suivant ]


À la découverte de GNU Emacs

Version 1.36 (3 mai 2016)

Florent Rougon mailto:f . rougon (**AT**) free [point] fr