Ce cours est visible gratuitement en ligne.

Got it!
Last updated on Thursday, October 31, 2013

Introduction du cours

Voici un petit intermède sur l'usage de la marque et de la région dans Emacs, après mon premier article sur l'écriture du code C avec Emacs et en attendant le second tutoriel de la série.

Terminologie

Tout d’abord, si vous ne savez pas ce qu’est la marque ou la région, c’est que vous n’avez pas lu d’introduction à Emacs, ou que vous l’avez mal lue, ou qu’elle n’était pas bonne. Mais oublions ce petit détail ; je vais vous rappeler ce que sont ces éléments.

Petite explication. Dans votre fenêtre Emacs, vous avez un curseur, qui marque la position actuelle dans le buffer. C’est là où vous insérez le nouveau texte, entre autre. Et bien, vos yeux vous mentent, car il y a en vérité non pas un mais deux curseurs. Simplement, vous ne voyez pas le second. Son nom ? La marque. La marque, comme son nom l’indique, sert à repérer une position dans le texte. Comme nous allons le voir par la suite, cela a plus d’un emploi, mais l’utilisation première est de délimiter une zone : entre la marque et le point (dans la terminologie emacsienne, le point est la position du curseur, tandis que le curseur lui-même est l’entité visuelle colorée, qui peut clignoter, ou pas). Cette zone s’appelle la région.

Analogie avec les éditeurs païens

Il existe beaucoup d’éditeurs graphiques, mais cette diversité cache en fait des concepts similaires sans aucune originalité (il paraît que c’est pour ne pas désorienter le débutant). Parmi ceux-ci en existe un du nom de sélection. Bon, la sélection, c’est la chose que vous obtenez lorsque vous surlignez un bout de texte avec votre souris. Hormis le fait qu’elle revêt alors une jolie couleur, elle sert aussi à certaines opérations de portée locale, telles que la copie, la coupure, etc.

Sous Emacs, la région est ce qui s’en rapproche le plus, mais comme nous allons le voir, son comportement diffère quelque peu.

Quant à la marque, il semble qu’elle ait disparu au profit de techniques tout à fait modernes faisant plein usage du matériel contemporain : le défilement et le pointage à la souris.

First encounter: la marque et la région pour les païens

La commande pour poser la marque est C-SPC (ou C-@ si vous avez un terminal tellement ésotérique qu’il ne reconnaît pas C-SPC comme un alias de C-@). C-SPC correspond à la combinaison des touches Ctrl et espace, pour les petits étourdis. Essayez. Un petit message devrait s’être affiché dans le minibuffer (la zone de saisie en bas de votre Emacs, pour les grands grands étourdis). Ce message mis à part, vous ne devriez rien avoir remarqué de particulier. En effet, comme je vous l’ai dit, la marque est invisible. Déplacez-vous un peu dans votre buffer et bientôt, vous aurez oublié où vous l’avez placée. La deuxième commande utile est donc celle qui vous indiquera où se trouve la marque ; une façon commode d’obtenir cette information est d’échanger la marque et le point : en d’autres termes, de vous téléporter là où se trouve la marque et de placer la marque où vous vous trouvez actuellement. La commande est C-x C-x. L’opération étant symétrique, un deuxième C-x C-x vous ramènera à votre point de départ.

Nous allons maintenant voir les deux opérations de base sur la région (qui, je vous le rappelle, est automatiquement délimitée par la marque et le point) : la copie et la coupure. Dans le monde d’Emacs, le terme exact est kill, soit « tuer », en bon français. Allez savoir pourquoi les interfaces modernes n’ont pas conservé ce vocabulaire… Sans plus attendre, les commandes : C-w pour couper, M-w (dois-je rappeler qu’il s’agit de Alt et w sur un clavier) pour copier.

Pour coller le texte ainsi extrait, vous pouvez utiliser la commande C-y ; le terme exact pour dire « coller » est en vérité yank (dont la traduction est approximativement « tirer avec force »). Sachez également que vous disposez d’un historique des morceaux copiés ou coupés, appelé kill ring (« cercle de meur… » arrêtons avec les traductions). Chaque kill est automatiquement placé dans celui-ci. Juste après avoir utilisé C-y, vous pouvez parcourir l’historique avec la commande M-y. Le texte collé est alors remplacé par une des sélections précédentes ; répétez jusqu’à obtenir le morceau voulu. Remarquez que la commande accepte les arguments numériques. Cela n’a guère d’intérêt en temps normal (sauf si vous vous rappelez par cœur l’ordre de vos sélections passées), mais cela signifie surtout que vous pouvez utiliser M-- M-y pour naviguer en sens inverse, si vous sautez par mégarde le bon élément.

En résumé :

C-SPC ou C-@

pose la marque

C-x C-x

échange la marque et le point

C-w

coupe la région

M-w

copie la région

C-y

colle le texte coupé ou copié

M-y

navigue dans l’historique des morceaux coupés ou copiés

Second offence: utilisations (relativement) avancées

Dans Emacs, la marque a d’autres usages que la simple sélection. L’autre utilité majeure de la marque est le déplacement. Un certain nombre de commandes de navigation (recherche, déplacements sur de longues distances, etc.) déposent la marque à l’endroit où vous vous trouviez avant l’action. Si c’est le cas, un petit message vous en informe, dans le minibuffer. Vous pouvez ainsi compter sur C-x C-x pour retourner à votre position précédente. Essayez, par exemple, la commande M-< suivi de la commande C-x C-x. Voici quelques commandes usuelles qui placent la marque :

M-<

début de buffer

M->

fin de buffer

C-s

recherche

C-M-s

recherche (avec des expressions régulières)

C-r

recherche en arrière

C-M-r

recherche en arrière (avec des expressions régulières)

Cette astuce est suffisante pour aller d’un bout à l’autre du buffer tant que vous ne changez pas la position de la marque, ce qui n’est guère pratique pour l’édition. Mais comme Emacs est bien fait, il existe un historique des positions auxquelles vous avez placé la marque : c’est le mark ring. La commande servant à parcourir la liste est la même que celle pour poser la marque, mais avec un préfixe, c’est-à-dire C-u C-SPC. Elle vous téléporte au dernier endroit où vous avez posé la marque. Son usage répété déroule toute la liste.

Comme il est fastidieux de taper C-u C-SPC tout le temps pour aller là où vous voulez, la variable set-mark-command-repeat-pop existe. Donnez lui une valeur autre que nil (généralement t ; voir mon article sur la configuration pour savoir comment changer la valeur d’une variable), et vous pourrez abréger la commande en simplement C-SPC, à partir de la seconde fois consécutive (la première doit comporter le préfixe afin de la distinguer de la commande normale de marquage).

Il existe aussi un global mark ring qui sauvegarde la marque la plus récente dans chaque buffer visité, dans l’ordre de leur visite. Cela vous permet d’aller d’un buffer à l’autre tout en suivant la marque. Je ne fais pas grand usage de ce mécanisme, mais peut-être y trouverez-vous un intérêt. La commande est C-x C-SPC et est l’analogue de C-u C-SPC pour le global mark ring.

En résumé :

C-x C-x

échange la marque et le point (rappel)

C-u C-SPC

parcourt l’historique des marques

C-x C-SPC

parcourt l’historique global des marques

Restriction de portée avec la région

Au-delà du copier / coller, la région a comme autre principal usage la restriction de la portée de certaines commandes. Dans cette optique, il faut distinguer les commandes spécifiquement prévues pour un usage avec la région de celles qui agissent habituellement sur tout le buffer mais peuvent être limitées à une zone particulière.

Les premières ont très souvent des noms qui comportent le mot region, par exemple : comment-region. En vérité, les commandes C-w et M-w vues précédemment font partie de cette catégorie. En voici quelques unes dignes d’intérêt :

C-M-\ (ou M-x indent-region)

indente la région

M-x comment-region

commente la région

M-x uncomment-region

décommente la région

La seconde catégorie repose sur la notion de région active. Par défaut, la région est passive : les commandes ne sont pas affectées par sa présence. En effet, comme nous avons vu dans la section précédente, il est courant de laisser traîner la marque à des fins de repérage et de déplacement, et il serait dérangeant que toutes les opérations se restreignent à cette zone. Il existe plusieurs manières d’obtenir une région active. Je vais en décrire deux, sans doute les plus faciles à mettre en œuvre. Tout d’abord, si vous avez déjà marqué une région et souhaitez la rendre active, tapez C-u C-x C-x. Si au contraire, vous voulez sélectionner une région active à partir du point jusqu’à une autre position, au lieu de déposer la marque comme d’habitude avec C-SPC, faites plutôt C-SPC C-SPC : en plus d’apposer la marque, cette commande active la région entre celle-ci et le point. Une fois l’activation effectuée, vous pouvez vous déplacer pour l’agrandir ou la rétrécir, le surlignement vous rappelle qu’elle est bien active. C-g annule ce mode et retourne la région à son état passif.

Les commandes les plus importantes travaillant sur la région active sont sans doute les commandes de remplacement, interactives (M-% et C-M-% (avec des expressions régulières)) ou non interactives (replace-string et replace-regexp). Aussi, la commande d’insertion de commentaires (M-;) se transforme en comment-region si la région est active. Du reste, regardez s’il est fait mention de la région active, dans la description des fonctions, pour repérer celles qui tiennent compte de ce mécanisme.

En résumé :

C-u C-x C-x

active la région actuelle

C-SPC C-SPC

pose la marque et active la région

C-g

retourne la région au mode passif

M-%

remplacement interactif

C-M-%

remplacement interactif avec des expressions régulières

M-x replace-string

remplacement

M-x replace-regexp

remplacement avec des expressions régulières

M-;

insère un commentaire ou commente la région active

Final battle: utiliser la marque et la région au bon moment

Bien, maintenant que vous savez utiliser la marque et la région correctement, il est temps d’apprendre à les utiliser judicieusement. Lorsque l’on débute, on a tendance à utiliser la sélection pour tout et n’importe quoi, un peu comme dans un éditeur païen.

Exemple concret : vous voulez couper le mot suivant dans le texte. L’utilisateur bêta sous l’éditeur bêta attrape sa souris, sélectionne le mot, et le coupe en utilisant le menu contextuel. L’utilisateur gamma sous l’éditeur gamma sait qu’il y a un raccourci au clavier pour se déplacer de mot en mot et un autre pour sélectionner au fur et à mesure que l’on se déplace, par exemple quelque chose comme « je maintiens Shift tout en appuyant sur Ctrl et sur la flèche droite » ; puis il coupe grâce au magique « Ctrl-X ». Le même cheminement, sous Emacs, donne C-SPC M-f C-w. On progresse, mais ce n’est toujours pas ça. En vérité, couper le mot suivant est le fait d’une seule commande : M-d.

Ce que je veux vous dire par là est qu’il ne faut pas abuser de la région, si vous n’en avez pas besoin. Il existe trente-six façons de tuer dans Emacs : vous pouvez couper des mots, des lignes, et plein d’autres choses ! Pour vous aider à ne pas utiliser la marque et la région pour n’importe quoi, voici une petite liste de commandes usuelles :

M-d

coupe le mot suivant

M-DEL

coupe le mot précédent

C-k

coupe la fin de la ligne ou la ligne entière si elle est vide

C-M-k

coupe l’expression équilibrée débutant au point

M-z

coupe jusqu’à un caractère donné

Aussi, n’oubliez pas que certaines commandes placent la marque pour vous, comme la recherche ; il est inutile donc de la poser deux fois. Si, par exemple, vous souhaitez effacer le texte jusqu’à un certain mot, faîtes donc une recherche sur ce mot, avec C-s, puis tapez RET pour arrêter la recherche ; C-w coupera la région ainsi délimitée.

Enfin, lorsque vous aurez maîtrisé les astuces présentées ici, vous aurez peut-être trop tendance à en dépendre ; par exemple, l’historique des marques est très pratique, mais si vous vous retrouvez à placer des marques de partout pour vous repérer et sentez que la navigation perd en efficacité, je vous conseille d’essayer d’utiliser les registres.

Sur ces quelques conseils pratiques s’achève ce court tutoriel sur l’utilisation d’Emacs. La prochaine fois, je parlerai de… ce qui me passera par la tête, je ne sais pas bien encore !

How courses work

  • 1

    You have now access to the course contents and exercises.

  • 2

    You will advance in the course week by week. Each week, you will work on one part of the course.

  • !

    Exercises must be completed within one week. The completion deadline will be announced at the start of each new part in the course. You must complete the exercises to get your certificate of achievement.

  • 3

    At the end of the course, you will get an email with your results. You will also get a certificate of achievement if you are a

Example of certificate of achievement
Example of certificate of achievement