Macros dans Emacs

Il arrive que quand on veut nettoyer un bout de code, on n'ait pas le courage de réfléchir à une regex de la mort qui tue. Dans ces cas là, soit on ne sait pas et on y va à la main (c'est chiant...), soit on utilise les macros!

Qu'est-ce qu'une macro dans Emacs? Le principe est simple, il s'agit tout simplement d'enregistrer une suite d'actions puis de les ré-exécuter autant de fois qu'on veut.

Admettons qu'on veuille formater le bout de code suivant (le symbole "|" indique où se trouve le curseur):

byte[] stuff = {
|aabb ccdd eeff
1122 3344 5566
7788 9900
};

Commençons par lancer l'enregistrement de macro avec la combinaison de touche C-x (, puis effectuons l'action sur le premier bout de tableau (il faut que l'action soit reproductible n fois), ce qui donne 0 x C-f C-f , <spc> 0 x C-f C-f , C-f et on arrête l'enregistrement avec la combo C-x ) ce qui donne:

byte[] stuff = {
0xaa, 0xbb, |ccdd eeff
1122 3344 5566
7788 9900
};

À présent on peut ré-exécuter cette macro avec la commande C-x e autant de fois qu'il y a de groupes dans le tableau (il y a 7 groupes) avec la commande C-u 7 C-x e, et on obtient le tableau (presque) tout formatté:

byte[] stuff = {
0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
0x11, 0x22, 0x33, 0x44, 0x55, 0x66,
0x77, 0x88, 0x99, 0x00,
|};

Il ne reste plus qu'à enlever la virgule en trop et voilà.

Vus : 772
Publié par Etenil : 58