Le manuel indique:
Vous pouvez utiliser des superpositions pour modifier l'apparence du texte d'un tampon à l'écran, pour des raisons de présentation.
D'après son nom, il suggère qu'il peut être utilisé pour créer des «calques» sur du texte existant, mais la description ci-dessus semble indiquer qu'il modifie l'apparence du texte, ce qui ressemble beaucoup à ce que font les propriétés du texte.
Qu'est-ce qu'une utilisation concrète des superpositions? Que proposent-ils que les propriétés de texte ne proposent pas? Peuvent-ils être utilisés pour écrire du texte sur du texte dans un tampon, comme une fenêtre contextuelle, une boîte d'informations, etc.?
text-properties
overlays
Sébastien Le Callonnec
la source
la source
i text properties
, bien sûr.Réponses:
Que sont les superpositions?
Tout d'abord, ce sont des objets élis. Cela sera pertinent plus tard.
Comme vous l'avez dit vous-même, ils représentent des couches qui s'appliquent au-dessus des régions du tampon. Ces couches ont des propriétés de texte, tout comme le texte réel dans le tampon. Toute propriété régulière d'une superposition s'applique au texte en dessous. Cependant, certaines propriétés sont spécifiques aux superpositions (elles ne font rien si elles sont appliquées au texte).
Pourquoi sont-ils utiles?
Pour les deux raisons que j'ai évoquées ci-dessus:
Ce sont des objets
Cela signifie que vous pouvez les stocker dans des listes et les manipuler facilement. Vous pouvez modifier leurs propriétés sans avoir à suivre où ils se trouvent actuellement. Mieux encore, vous pouvez utiliser les garder une trace de l' endroit où les choses sont dans la mémoire tampon.
Cette réponse de Stefan est un bon exemple de superpositions utilisées pour garder une trace des régions tampons. En voici un court extrait.
Il utilise des superpositions pour enregistrer les régions à aligner et les expressions rationnelles à utiliser sur chacune d'elles.
my--auto-align-overlays
estune liste où les superpositions sont stockées, et elles sont facilement accessibles en parcourant cette liste.
En revanche, si nous utilisions des propriétés de texte pour cela (ce qui est possible), nous n'aurions aucun moyen facile d'y accéder. Vous devez analyser le tampon pour trouver les propriétés du texte.
Ils sont légèrement plus puissants
Il y a quelques propriétés de texte qui n'ont d'effet que sur les superpositions. Vous pouvez trouver la liste complète sur le manuel . Il est trop grand pour être inclus ici, mais voici un bref point culminant.
En particulier, la
before-string
propriété vous permet d'affecter l'affichage du tampon même avec une superposition de largeur 0. C'est quelque chose que vous ne pouvez pas faire avec la propriété text. Tout ce que vous faites avec les propriétés de texte doit soit passer par-dessus un texte existant (ce qui pourrait masquer ce texte), soit parcourir une nouvelle chaîne de texte que vous insérez (ce qui modifie le contenu réel du tampon).Voici un exemple d'extrait à ce sujet. Évaluez-le sur un tampon temporaire.
Quand sont-ils mauvais?
Les superpositions sont beaucoup plus exigeantes (en termes de traitement) que les propriétés de texte. Certaines opérations pertinentes (telles que l'insertion de texte, si je ne me trompe pas) prennent du temps proportionnel au nombre de superpositions dans un tampon. Pour cette raison, ils ne conviennent pas lorsque vous en avez besoin d'un grand nombre. Dans ce cas, vous devez vous résigner aux propriétés du texte.
la source
Les superpositions et les propriétés de texte ont exactement les mêmes capacités. Ils ajoutent des marges de changement, des boutons, des visages, des icônes de franges, des info-bulles, des images, des reflets, etc. à une partie spécifique du texte. Cependant, il existe une énorme différence conceptuelle:
Les superpositions sont indépendantes , les propriétés de texte ne le sont pas. Emacs a un type de superposition distinct , mais il n'y a pas de «type de propriété de texte». Les propriétés de texte sont intrinsèquement liées à la chaîne sur laquelle elles ont été définies. Les superpositions, d'autre part, sont attachées à un tampon.
Il y a quelques implications pratiques de cette différence:
L'essence de tout cela est que vous pouvez gérer les superpositions séparément du contenu du texte. Conceptuellement, vous les utiliseriez pour des éléments que vous afficheriez dans le tampon, même s'ils sont indépendants du texte.
En pratique, vous utiliseriez des superpositions si les éléments que vous souhaitez ajouter au texte changent fréquemment, tandis que vous utiliseriez les propriétés de texte si les éléments sont constants.
Par exemple, Emacs utilise des propriétés de texte pour créer les boutons et les widgets d'entrée dans un
M-x customize
tampon. Ces widgets sont créés une fois et y restent tant que le tampon est vivant, il n'est donc pas nécessaire d'ajouter des superpositions.Cependant, Flycheck utilise des superpositions pour mettre en évidence les erreurs dans le tampon, car il doit fréquemment supprimer et ajouter des surbrillances.
la source