Das Handbuch besagt:
Sie können Überlagerungen verwenden, um die Darstellung des Textes eines Puffers auf dem Bildschirm zu ändern, um die Präsentationsfunktionen zu nutzen.
Seinem Namen nach schlägt es vor, dass es verwendet werden kann, um „Ebenen“ über vorhandenem Text zu erstellen, aber die obige Beschreibung scheint darauf hinzudeuten, dass das Erscheinungsbild von Text geändert wird, was den Eigenschaften von Text sehr ähnlich ist.
Was ist eine konkrete Verwendung von Überlagerungen? Was bieten sie, was Texteigenschaften nicht bieten? Können sie verwendet werden, um Text über einen Puffer wie ein Popup, eine Infobox usw. zu schreiben?
text-properties
overlays
Sébastien Le Callonnec
quelle
quelle
i text properties
natürlich auch (im selben Handbuch) .Antworten:
Was sind Überlagerungen?
Erstens sind sie Elisp-Objekte. Dies wird später relevant sein.
Wie Sie selbst sagten, stellen sie Ebenen dar, die auf Regionen des Puffers angewendet werden. Diese Ebenen haben genau wie der eigentliche Text im Puffer Texteigenschaften. Jede reguläre Eigenschaft, über die eine Überlagerung verfügt, gilt für den Text darunter. Es gibt jedoch einige Eigenschaften, die speziell für Überlagerungen gelten (sie haben keine Auswirkung, wenn sie auf Text angewendet werden).
Warum sind sie nützlich?
Aus den beiden Gründen habe ich oben angedeutet:
Sie sind Objekte
Dies bedeutet, dass Sie sie in Listen speichern und einfach handhaben können. Sie können ihre Eigenschaften ändern, ohne den aktuellen Standort verfolgen zu müssen. Noch besser, Sie können sie verwenden , um zu verfolgen, wo sich Dinge im Puffer befinden.
Diese Antwort von Stefan ist ein gutes Beispiel für die Verwendung von Overlays, um die Pufferbereiche zu verfolgen. Hier ist ein kleiner Ausschnitt davon.
Mithilfe von Overlays wird aufgezeichnet, welche Bereiche ausgerichtet werden sollen und welche Regexp-Werte für die einzelnen Bereiche verwendet werden sollen.
my--auto-align-overlays
isteine Liste, in der die Overlays gespeichert sind und auf die Sie bequem zugreifen können, indem Sie diese Liste durchsehen.
Wenn wir dagegen Texteigenschaften verwenden würden (was möglich ist), hätten wir keine einfache Möglichkeit, darauf zuzugreifen. Sie müssen den Puffer analysieren, um Texteigenschaften zu finden.
Sie sind etwas mächtiger
Es gibt einige Texteigenschaften, die sich nur auf Overlays auswirken. Die gesamte Liste finden Sie im Handbuch . Es ist zu groß, um es hier aufzunehmen, aber hier ist ein kurzes Highlight.
Insbesondere
before-string
können Sie mit dieser Eigenschaft die Anzeige des Puffers auch bei einer Überlagerung mit der Breite 0 beeinflussen. Welches ist etwas, das Sie nicht mit Texteigenschaft tun können. Alles, was Sie mit Texteigenschaften tun, muss entweder über einen vorhandenen Text gehen (der diesen Text möglicherweise verdeckt) oder über eine neue Textzeichenfolge, die Sie einfügen (die den tatsächlichen Inhalt des Puffers ändert ).Hier ist ein Beispiel-Snippet dazu. Bewerten Sie es in einem temporären Puffer.
Wann sind sie schlecht?
Overlays sind viel anspruchsvoller (verarbeitungstechnisch) als Texteigenschaften. Einige relevante Vorgänge (z. B. das Einfügen von Text, wenn ich mich nicht irre) benötigen Zeit, die proportional zur Anzahl der Überlagerungen in einem Puffer ist. Aus diesem Grund sind sie ungeeignet, wenn Sie eine große Anzahl von ihnen benötigen. In diesem Fall sollten Sie auf Texteigenschaften verzichten.
quelle
Überlagerungen und Texteigenschaften haben genau die gleichen Funktionen. Sie fügen einem bestimmten Teil des Texts Änderungsränder, Schaltflächen, Gesichter, Randsymbole, QuickInfos, Bilder, Hervorhebungen usw. hinzu. Es gibt jedoch einen großen konzeptionellen Unterschied:
Überlagerungen sind unabhängig , Texteigenschaften jedoch nicht. Emacs hat einen eigenen Overlay-Typ, aber keinen "Texteigenschaftstyp". Texteigenschaften sind von Natur aus an die Zeichenfolge gebunden, für die sie festgelegt wurden. Overlays hingegen sind an einen Puffer gebunden.
Dieser Unterschied hat einige praktische Auswirkungen:
Das Wesentliche dabei ist, dass Sie Overlays unabhängig vom Textinhalt verwalten können. Konzeptionell würden Sie sie für Dinge verwenden, die Sie im Puffer anzeigen würden, obwohl sie vom Text unabhängig sind.
Praktischerweise würden Sie Überlagerungen verwenden, wenn sich das Material, das Sie zu Text hinzufügen möchten, häufig ändert, während Sie Texteigenschaften verwenden würden, wenn das Material konstant ist.
Beispielsweise verwendet Emacs Texteigenschaften, um die Schaltflächen und Eingabe-Widgets in einem
M-x customize
Puffer zu erstellen . Diese Widgets werden einmal erstellt und bleiben dort, solange der Puffer aktiv ist, sodass keine Überlagerungen erforderlich sind.Allerdings Flycheck verwendet Overlays Fehler im Puffer zu markieren, da es häufig entfernen und hinzufügen Highlights muss.
quelle