13.2. Mode Verrouillage de Police

Le mode Verrouillage de Police est un mode mineur, toujours local à un tampon particulier, qui met en surbrillance (ou "fontifie") en utilisant diverses faces selon la syntaxe de texte que vous éditez. Il peut reconnaître les commentaires et les chaînes dans la plupart des langages, et peut aussi reconnaître et mettre correctement en surbrillance diverses autres constructions importantes--par exemple, les noms de fonctions étant définies ou les mots-clefs réservés.

La commande M-x font-lock-mode active ou désactive le mode Verrouillage de Police selon l'argument, et passe de l'un à l'autre lorsqu'aucun argument n'est fourni. La fonction turn-on-font-lock active inconditionnellement le mode Verrouillage de Police. Cette fonction est utile pour les foctions crochets de modes. Par exemple, pour activer le mode Verrouillage de Police lorsque vous éditez un fichier C, vous pouvez faire cela :

(add-hook 'c-mode-hook 'turn-on-font-lock)

Pour activer le mode Verrouillage de Police automatiquement dans tous les modes qui le permetent, personnalisez l'option utilisateur global-font-lock-mode ou utilisez la fonction global-font-lock-mode dans votre fichier .emacs, comme ceci :

(global-font-lock-mode 1)

Le mode Verrouillage de Police utilise plusieurs faces spécifiques pour faire son travail, comme font-lock-string-face, font-lock-comment-face, et d'autres. Le meilleur moyen de les connaître toutes est d'utiliser la complétion du nom de face dans set-face-foreground.

Pour changer les couleurs ou les polices utilisées par le mode Verrouillage de Police pour fontifier différentes parties de texte, changez juste ces faces. Il existe deux moyens de faire cela :

Pour obtenir le plein bénéfice du mode Verrouillage de Police, vous devez choisir une police ayant des variantes grasse, italique et grasse-italique ; autrement, vous devez avoir un écran couleur ou à niveau de gris.

La variable font-lock-maximum-decoration spécifie le niveau préféré de fontification, pour les modes fournissant plusieurs niveaux. Le niveau 1 est le niveau de fontification moindre ; certains modes fournissent des niveaux pouvant aller jusqu'à 3. La valeur par défaut est "aussi haut que possible." Vous pouvez spécifier un entier, qui s'applique à tous les modes, ou différents nombres pour des modes majeurs particuliers ; par exemple, pour utiliser le niveau 1 pour les modes C/C++, et le niveau par défaut autrement, utilisez :

(setq font-lock-maximum-decoration
      '((c-mode . 1) (c++-mode . 1)))

La fontification peut être trop longue pour de longs tampons, vous pouvez donc la supprimer. La variable font-lock-maximum-size spécifie une taille de tampon, à partir de laquelle la fontification du tampon est supprimée.

La fontifiction des commentaires et des chaînes (ou fontification "syntaxique") repose sur l'analyse de la structure syntaxique du texte du tampon. Pour des raisons de rapidité, certains modes comme le mode C et le mode Lisp reposent sur une convention spéciale : une parenthèse ouvrante dans la colonne la plus à gauche définit toujours le début d'une définition, et se trouve donc toujours en dehors de toute chaîne ou commentaire. (Section 24.4.) Si vous ne suivez pas cette convention, le mode Verrouillage de Police peut mal fontifier le texte se trouvant après une parentèse ouvrante placée sur la première colonne et appartenant à une chaîne ou un commentaire.

La variable font-lock-beginning-of-syntax-function (toujours locale au tampon) spécifie comment le mode Verrouillage de Police peut trouver une position qui est garantie être en dehors de tout commentaire ou chaîne. Dans les modes utilisant la convention de la parenthèse ouvrante sur la colonne la plus à gauche, la valeur par défaut de la variable est beginning-of-defun--ceci indique au mode Verrouillage de Police d'utiliser cette convention. Si vous définissez cette variable à nil, le Verrouillage de Police ne repose plus sur la convention. Ceci annule les résultats incorrects, mais le prix est que, dans certains cas, la fontification pour une modification de texte doit rescanner le texte du tampon depuis le début du tampon. Ceci peut considérablement ralentir l'affichage lors de défilements, particulièrement si vous êtes près de la fin d'un tampon de grande taille.

Des motifs à mettre en surbrillance par le Verrouillage de Police existent pour un grand nombre de modes, mais vous pouvez vouloir fontifier des motifs supplémentaires. Vous pouvez utiliser la fonction font-lock-add-keywords, pour ajouter vos propres motifs à mettre en surbrillance pour un mode particulier. Par exemple, pour mettre en surbrillance les mots FIXME: dans les commentaires C, utilisez :

(font-lock-add-keywords
 'c-mode
 '(("\\<\\(FIXME\\):" 1 font-lock-warning-face t)))