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 un intervalle de lignes donné. 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-colonnes, et pour convertir des textes vers 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 de la même manière 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 fait une ligne de haut. La différence entre lignes et colonnes vient du fait que le point (et 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 en haut à gauche à l'endroit du point (yank-rectangle).

C-x r o

Insère des espaces pour remplir l'espace occupé par la région rectangle (open-rectangle). Ce que contenait auparavant la région rectangle se trouve décalé 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 de gauche du rectangle.

C-x r t chaîne RET

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

M-x replace-rectangle RET chaîne RET

Remplace chaque ligne de la région rectangle par chaîne (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ébarrasser du texte d'un rectangle : vous pouvez supprimer le texte ou le sauvegarder comme "dernier rectangle coupé". Les commandes correspondantes sont C-x r d (delete-rectangle) et C-x r k (kill-rectangle). Dans chacun des cas, la portion de chaque ligne contenue dans les frontières du rectangle est supprimée, ce qui décale le texte qui suit sur la ligne (s'il y en a) vers la gauche.

Notez que "couper" un rectangle n'est pas couper au sens habituel ; le rectangle n'est pas stocké dans le presse-papiers, mais dans un endroit spécial qui ne retient que le dernier rectangle coupé. Coller un rectangle est très différent de coller du texte linéaire, au point que l'on doit utiliser des commandes de colle différentes.

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 en 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-colonnes.

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 avec des 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 équivaut à le supprimer puis à insérer un rectangle d'espaces de la même taille.

La commande M-x delete-whitespace-rectangle supprime les espaces à partir d'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 change rien au comportement de cette commande.

La commande C-x r t (M-x string-rectangle) insère une chaîne dans chaque ligne de la région rectangle, avant celui-ci, en décalant le texte vers la droite.

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