11.10. Rectangles

Les commandes de rectangle opérent sur des régions rectangulaires de texte : tous les caractères compris entre une paire de colonnes donnée, dans une étendue de lignes donnée. Des commandes sont fournies pour couper des rectangles, coller des rectangles coupés, les effacer, les remplir avec des espaces ou du texte, ou les supprimer. Les commandes de rectangle sont utiles pour des textes au format multi-colonne, et pour convertir des textes dans ou à partir de ce format.

Pour spécifier un rectangle sur lequel une telle commande doit travailler, vous placez la marque à un coin et le point au coin opposé. Le rectangle ainsi spécifié est appelé la région rectangle car vous contrôlez celui-ci d'une manière similaire que vous contrôlez la région. Mais n'oubliez pas qu'une combinaison donnée d'un point et d'une marque peut être interprétée soit comme une région, soit comme un rectangle, selon la commande qui l'utilise.

Si le point et la marque sont sur la même colonne, le rectangle qu'ils délimitent est vide. S'ils sont sur la même ligne, le rectangle est haut d'une ligne. La différence entre lignes et colonnes vient du fait que le point (et a fortiori la marque) sont entre deux colonnes, mais sur une ligne.

C-x r k

Coupe le texte de la région rectangle, sauvegardant son contenu comme "dernier rectangle coupé" (kill-rectangle).

C-x r d

Supprime le texte de la région rectangle (delete-rectangle).

C-x r y

Colle le dernier rectangle coupé avec son coin haut gauche au point (yank-rectangle).

C-x r o

Insére des espaces pour remplir l'espace occupé par la région rectangle (open-rectangle). Ceci pousse le précédent contenu de la région rectangle vers la droite.

M-x clear-rectangle

Efface la région rectangle en remplaçant son contenu par des espaces.

M-x delete-whitespace-rectangle

Efface les espaces dans chacune des lignes du rectangle spécifié, en commençant par la colonne gauche du rectangle.

C-x r t cha^ine RET

Insère cha^ine dans chaque ligne de la région rectangle. (string-rectangle).

M-x replace-rectangle RET cha^ine RET

Remplace chaque ligne de la région rectangle avec cha^ine (string-rectangle).

Les opérations sur les rectangles se divisent en deux classes : les commandes supprimant et insérant des rectangles, et les commandes rendant des rectangles vides.

Il y a deux manières de se débarasser du texte d'un rectangle : vous pouvez supprimer le texte ou le sauvegarder comme "dernier rectangle coupé". Les commandes pour ces deux moyens sont C-x r d (delete-rectangle) et C-x r k (kill-rectangle). Dans chacun de ces cas, la portion de chaque ligne contenue entre les frontières du rectangle sont supprimées, déplaçant le texte qui suit sur la ligne (s'il y en a) vers la gauche.

Notez que "couper" un rectangle n'est pas couper dans le sens habituel ; le rectangle n'est pas stocké dans le presse-papiers, mais dans un endroit spécial qui se souvient uniquement du dernier rectangle coupé. Coller un rectangle est si différent de coller du texte linéaire que des commandes de colle différentes doivent être utilisées.

Pour coller le dernier rectangle coupé, tapez C-x r y (yank-rectangle). Coller un rectangle est l'inverse de le couper. Le point spécifie l'endroit où placer le coin haut gauche du rectangle. La première ligne du rectangle est insérée au point, la seconde ligne du rectangle est insérée une ligne plus bas, et ainsi de suite. Le nombre de lignes affectées est déterminé par la hauteur du rectangle sauvegardé.

Vous pouvez convertir une liste sur une colonne en une liste sur deux colonnes en coupant et collant des rectangles ; coupez la seconde moitié de la liste comme rectangle puis collez-la à côté de la première ligne de la liste. Section 31.23, pour un autre moyen d'éditer du texte multi-colonne.

Vous pouvez aussi copier des rectangles dans et à partir de registres avec C-x r r r et C-x r i r. Section 12.3.

Vous pouvez utiliser deux commandes pour remplir des rectangles d'espaces : M-x clear-rectangle qui efface le texte existant, et C-x r o (open-rectangle) qui insére un rectangle d'espaces. Effacer un rectangle est équivalent à le supprimer puis insérer un rectangle d'espaces de la même taille.

La commande M-x delete-whitespace-rectangle supprime le espaces horizontaux en commençant sur une colonne donnée. Cela s'applique à chacune des lignes du rectangle, et la colonne est spécifiée par le côté gauche du rectangle. Le côté droit du rectangle ne fait aucune différence pour cette commande.

La commande C-x r t (M-x string-rectangle) insére une cha^ine dans chaque ligne de la région rectangle avant le rectangle, et déplaçant le texte vers la droite.

La commande M-x replace-rectangle est similaire à C-x r t, mais remplace le rectangle d'origine. La longueur de la cha^ine ne doit pas forcément être la même que la largeur du rectangle. Si la longueur de la cha^ine est inférieure, le texte après le rectangle est déplacé vers la gauche ; si la cha^ine est plus large que le rectangle, le texte après le rectangle est déplacé vers la droite.