23.5. Remplissage de Texte

Remplir du texte veut dire le découper en lignes d'une certaine longueur. Emacs remplit le texte de deux manières différentes. Dans le mode Remplissage Automatique, l'insertion de texte avec des caractères auto-insérables remplit aussi le texte automatiquement. Il existe aussi des commandes de remplissage explicites que vous pouvez utiliser lorsque l'édition du texte ne le remplit pas automatiquement. Lorsque vous éditez du texte formaté, vous pouvez spécifier un style de remplissage pour chaque portion du texte (Section 23.11).

23.5.1. Mode Remplissage Automatique

Le mode Remplissage Automatique est un mode mineur dans lequel les lignes sont automatiquement coupées lorsqu'elles deviennent trop longues. La coupure survient seulement lorsque vous tapez SPC ou RET.

M-x auto-fill-mode

Permet ou interdit le mode Remplissage Automatique.

SPC, RET

Dans le mode Remplissage Automatique, coupe la ligne si nécessaire.

M-x auto-fill-mode démarre le mode Remplissage Automatique s'il était arrêté, ou l'arrête s'il était démarré. Avec un argument numérique positif il démarre toujours le mode Remplissage Automatique, et avec un argument négatif l'arrête toujours. Vous pouvez voir si le mode Remplissage Automatique est effectif par la présence du mot Fill dans la ligne de mode, entre parenthèses. Le mode Remplissage Automatique est un mode mineur qui est activé ou désactivé individuellement pour chaque tampon. Section 32.1.

Dans le mode Remplissage Automatique, les lignes sont automatiquement coupées à un espace lorsqu'elles deviennent plus longues que la longueur spécifiée. La coupure de la ligne et le réarrangement s'effectuent seulement lorsque vous tapez SPC ou RET. si vous désirez insérer un espace ou un caractère newline sans permettre la coupure de la ligne, tapez C-q SPC ou C-q C-j (souvenez-vous qu'un caractère newline est en vérité control-J). De plus, C-o iinsére un caractère newline sans couper la ligne.

Le remplissage automatique fonctionne correctement avec les modes de langages de programmation, car il indente les nouvelles lignes avec TAB. Si une ligne de commentaire devient trop longue, le texte du commentaire est coupé en deux lignes de commentaires. Optionnellement, de nouveaux délimiteurs de commentaires sont ajoutés à la fin de la première ligne et au début de la seconde de manière que chacune des lignes soit un commentaire séparé ; la variable comment-multi-line contrôle le choix (Section 24.7).

Le remplissage adaptatif (voir la section suivante) fonctionne aussi bien pour le mode Remplissage Automatique que pour les commandes explicites de remplissage. Il prend automatiquement un préfixe de remplissage sur la seconde ou première ligne du paragraphe.

Le mode Remplissage Automatique ne remplit pas des paragraphes entiers ; il peut couper des lignes mais ne peut pas les fusionner. Ainsi l'édition au milieu d'un paragraphe peut rendre incorrect le remplissage du paragraphe. La manière la plus facile de rendre le paragraphe correctement rempli est d'utiliser les commandes explicites de remplissage. Section 23.5.2.

Un grand nombre d'utilisateurs apprécient le mode Remplissage Automatique et veulent l'utiliser pour tous les fichiers texte. La section sur les fichiers d'initialisation indique comment l'utiliser en permanence. Section 32.7.

23.5.2. Commandes Explicites de Remplissage

M-q

Remplit le paragraphe courant (fill-paragraph).

C-x f

Place la colonne de remplissage (set-fill-column).

M-x fill-region

Remplit chacun des paragraphes de la région (fill-region).

M-x fill-region-as-paragraph.

Remplit la région, la considérant comme un unique paragraphe.

M-s

Centre une ligne.

Pour remplir un paragraphe, utilisez la commande M-q (fill-paragraph). Cette commande opère sur le paragraphe contenant le point, ou celui suivant le point si ce dernier se trouve entre deux paragraphes. Le remplissage est effectué en supprimant toutes les coupures de ligne puis en en plaçant de nouveaux aux endroits nécessaires.

Pour remplir plusieurs paragraphes, utilisez M-x fill-region, qui divise la région en paragraphes et remplit chacun d'eux.

M-q et fill-region utilisent le même critère que M-h pour trouver les limites de paragraphes (Section 23.3). Pour plus de contrôle, vous pouvez utiliser M-x fill-region-as-paragraph, qui remplit tout entre le point et la marque. Cette commande supprime toutes les lignes vierges de la région, de sorte que les blocs séparés de texte terminent combinés en un seul bloc.

Un argument numérique à M-q permet de justifier le texte en plus de le remplir. Cela veut dire que des espaces supplémentaires sont insérés pour placer la ligne de marge droite exactement à la colonne de remplissage. Pour supprimer les espaces supplémentaires, utilisez M-q sans argument. (De même pour fill-region.) Un autre moyen de contrôler la justification et choisir d'autres styles de remplissage est d'utiliser la propriété justification de texte ; voir Section 23.11.7.

La commande M-s (center-line) centre la ligne courante par rapport à la colonne de remplissage courante. Avec un argument n, elle centre n lignes individuellement et place le point après celles-ci.

La longueur maximale d'une ligne pour le remplissage est définie dans la variable fill-column. La modification de la valeur de fill-column rend cette variable locale au tampon courant ; avant cela, la valeur par défaut est effective. La valeur par défaut est initialement 70. Section 32.2.4. Le plus facile pour définir fill-column est d'utiliser la commande C-x f (set-fill-column). Avec un argument numérique, elle utilise cet argument comme nouvelle colonne de remplissage. Avec seulement C-u comme argument, elle place fill-column à la position horizontale courante du point.

Les commandes Emacs considèrent normalement un point suivi de deux espaces ou d'un caractère newline comme la fin d'une phrase ; un point suivi seulement d'un espace indique une abbréviation et non la fin d'une phrase. Pour préserver la distinction entre les deux manières d'utiliser un point, les commandes de remplissage ne coupent pas les lignes après un point suivi seulement d'un espace.

Si la variable sentence-end-double-space est nil, les commandes de remplissage attendent et laissent seulement un espace à la fin des phrases. D'ordinaire cette variable est t, et les commandes de remplissage insistent sur les deux espaces à la fin des phrases, comme expliqué ci-dessus. Section 23.2.

Si la variable colon-double-space est non nil, les commandes de remplissage insérent deux espaces après un caractère deux-points.

23.5.3. Le Préfixe de Remplissage

Pour remplir un paragraphe dans lequel chaque ligne commence avec une marque spéciale (qui peut être quelques espaces, donnant un paragraphe indenté), vous pouvez utiliser la caractéristique du préfixe de remplissage. Le préfixe de remplissage est une cha^ine qu'Emacs attend à chaque début de ligne, et qui n'est pas inclue dans le remplissage. Vous pouvez spécifier explicitement un préfixe de remplissage ; Emacs peut aussi déduire automatiquement le préfixe de remplissage (Section 23.5.4).

C-x .

Définit le préfixe de remplissage (set-fill-prefix).

M-q

Remplit un paragraphe en utilisant le préfixe de remplissage courant (fill-paragraph).

M-x fill-individual-paragraphs

Remplit la région, en considérant chaque changement d'indentation comme le début d'un nouveau paragraphe.

M-x fill-nonuniform-paragraphs

Remplit la région, considérant seulement les séparateurs de paragraphes comme le début d'un nouveau paragraphe.

Pour spécifier un préfixe de remplissage, allez sur une ligne commençant par le préfixe désiré, placez le point à la fin du préfixe, et appelez la commande C-x . (set-fill-prefix). C'est un point après C-x. Pour annuler le préfixe de remplissage, spécifiez un préfixe vide : tapez C-x . avec le point en début de ligne.

Lorsque le préfixe de remplissage est effectif, les commandes de remplissage suppriment le préfixe de remplissage de chaque ligne avant de les remplir et l'insére au début de chaque ligne après le remlpissage. Le mode de remplissage automatique insére aussi automatiquement le préfixe de remplissage lorsqu'il crée une nouvelle ligne. La commande C-o insére le préfixe de remplissage aux nouvelles lignes qu'elle crée, lorsque vous l'utilisez en début de ligne. (Section 7.7). De même, la commande M-^ supprime le préfixe (s'il est présent) après le caractère newline qu'elle supprime (Chapitre 22).

Par exemple, si fill-column est 40 et que vous définissez le préfixe de remplissage à ;; , alors M-q dans le texte suivant

;; Voici un
;; exemple de paragraphe
;; dans un commentaire de type Lisp.

produit ceci :

;; Voici un exemple de paragraphe dans
;; un commentaire de type Lisp.

Les lignes ne commençant pas avec le préfixe de remplissage sont considérées commencer un paragraphe, aussi bien pour M-q que pour les commandes sur les paragraphes ; ceci donne de bons résultats pour des paragraphes indentés (chaque ligne est indentée à part la première). Les lignes qui deviennent vides ou indentées une fois que le préfixe est supprimé séparent ou commencent aussi des paragraphes ; c'est ce qui est utilisé lorsque vous écrivez des commentaires de plusieurs paragraphes avec des délimiteurs de commentaire sur chaque ligne.

Vous pouvez utiliser M-x fill-individual-paragraphs pour définir le préfixe de remplissage pour chaque paragraphe automatiquement. Cette commande divise la région en paragraphes, traitant chaque changement de niveau d'indentation en début de ligne comme le début d'un nouveau paragraphe, et remplit chacun de ces paragraphes. Ainsi, chaque ligne dans un "paragraphe" a le même niveau d'indentation. Cette indentation est utilisé comme préfixe de remplissage pour ce paragraphe.

M-x fill-nonuniform-paragraphs est une commande similaire qui divise la région en paragraphes d'une manière différente. Elle considère seulement les lignes de séparation de paragraphe (définies par paragraph-separate) comme commençant un nouveau paragraphe. Les lignes d'un paragraphe pouvant de ce fait avoir différentes indentations, le préfixe de remplissage utilisé est le plus petit niveau d'indentation des lignes du paragraphe. Ceci donne de bons résultats pour des styles qui indentent la première ligne d'un paragraphe plus ou moins que le reste du paragraphe.

Le préfixe de remplissage est stocké dansla variable fill-prefix. Sa valeur est une cha^ine, ou nil lorsqu'il n'y a pas de préfixe de remplissage. C'est une variable locale aux tampons ; la modification de la variable affecte seulement le tampon courant, mais il existe une valeu par défaut que vous pouvez aussi modifier. Section 32.2.4.

La propriété d'indentation de texte fournit un autre moyen de contrôler le niveau d'indentation reçu par les paragraphes. Section 23.11.6.

23.5.4. Remplissage Adaptatif

Les commandes de remplissage peuvent déduire automatiquement le préfixe de remplissage correct pour un paragraphe dans certains cas : les espaces et certains caractères de ponctuation en début de ligne sont propagés sur toutes les lignes du paragraphe.

Si le paragraphe a deux lignes ou plus, le préfixe de remplissage est obtenu de la seconde ligne du paragraphe, mais seulement s'il appara^it aussi sur la première ligne.

Si un paragraphe a seulement une ligne, les commandes de remplissage peuvent obtenir un préfixe de cette ligne. La décision est compliquée car il y a trois choses raisonnables à faire dans un tel cas :

Ces trois styles de formatage sont couramment utilisés. Les commandes de remplissage essaient alors de déterminer ce que vous préférez, selon le préfixe qui appara^it et sur le mode majeur. Voici comment elles procèdent.

Si le préfixe trouvé sur la première ligne correspond à adaptive-fill-first-line-regexp, ou s'il semble être une séquence de début de commentaire (qui dépend du mode majeur), alors le préfixe trouvé est utilisé pour remplir le paragraphe, dans la mesure où il n'agit pas comme un début de paragraphe pour les lignes suivantes.

Autrement, le préfixe trouvé est converti en un nombre équivalent d'espaces, et ces espaces sont utilisés comme préfixe de remplissage pour les lignes suivantes, dans la mesure où il n'agit pas comme un début de paragraphe sur les lignes suivantes.

En mode Texte, et dans les autres modes où seules les lignes vides et les délimiteurs de page séparent les paragraphes, le préfixe choisi par le remplissage adaptatif n'agit jamais comme un début de paragraphe, et peut toujours être utilisé pour le remplissage.

La variable adaptive-fill-regexp détermine quels types de débuts de lignes peuvent servir de préfixe de remplissage : tous les caractères en début de ligne correspondant à cette expression rationnelle sont utilisés. Si vous définissez la variable adaptive-fill-mode à nil, le préfixe de remplissage n'est jamais choisi automatiquement.

Vous pouvez spécifier des moyens plus complexes de choisir un préfixe de remplissage automatiquement en définissant la variable adaptive-fill-function comme une fonction. Cette fonction est appelée avec le point après la marge gauche d'une ligne, et doit retourner le préfixe de remplissage approprié selon cette ligne. Si elle retourne nil, cela veut dire qu'elle ne voit aucun préfixe de remplissage dans cette ligne.