Te ręczne stany:
Możesz użyć nakładek, aby zmienić wygląd tekstu bufora na ekranie ze względu na funkcje prezentacji.
Ze swojej nazwy sugeruje, że można go używać do tworzenia „warstw” na istniejącym tekście, ale powyższy opis wydaje się wskazywać, że zmienia wygląd tekstu, co wydaje się bardzo podobne do właściwości tekstu.
Jakie jest konkretne zastosowanie nakładek? Co oferują, że właściwości tekstu nie? Czy można ich używać do pisania tekstu nad tekstem w buforze, takim jak wyskakujące okienko, pole informacyjne itp.?
text-properties
overlays
Sébastien Le Callonnec
źródło
źródło
i text properties
Oczywiście także (w tej samej instrukcji) .Odpowiedzi:
Co to są nakładki?
Przede wszystkim są elipskimi obiektami. Będzie to miało znaczenie później.
Jak sam powiedziałeś, reprezentują one warstwy nakładające się na regiony bufora. Warstwy te mają właściwości tekstowe, podobnie jak tekst w buforze. Każda zwykła właściwość, którą ma nakładka, dotyczy tekstu pod nią. Jednak istnieją pewne właściwości, które są specjalne dla nakładek (nic nie robią, jeśli zostaną zastosowane do tekstu).
Dlaczego są przydatne?
Z dwóch powodów, o których wspomniałem powyżej:
To są przedmioty
Oznacza to, że możesz przechowywać je na listach i łatwo je obsługiwać. Możesz zmienić ich właściwości bez konieczności śledzenia, gdzie są teraz. Co więcej, możesz ich użyć do śledzenia miejsca w buforze.
Ta odpowiedź Stefana jest dobrym przykładem nakładek używanych do śledzenia regionów buforowych. Oto krótki fragment.
Używa nakładek, aby zarejestrować, które regiony mają zostać wyrównane, a które wyrażenie regularne użyć w każdym z nich.
my--auto-align-overlays
jestlista, w której są przechowywane nakładki, i można do nich łatwo uzyskać dostęp, przeglądając tę listę.
Natomiast gdybyśmy użyli do tego właściwości tekstu (co jest możliwe), nie mielibyśmy łatwego dostępu do nich. Musisz przeanalizować bufor, aby znaleźć właściwości tekstu.
Są nieco mocniejsze
Istnieje kilka właściwości tekstu, które mają wpływ tylko na nakładki. Całą listę można znaleźć w instrukcji . Jest za duży, aby go tu umieścić, ale oto krótkie wyróżnienie.
W szczególności
before-string
właściwość pozwala wpływać na wyświetlanie bufora nawet przy nakładce o szerokości 0. Tego nie można zrobić z właściwością text. Wszystko, co robisz z właściwościami tekstu, musi albo przejść do istniejącego tekstu (który może ukryć ten tekst), albo przejść do nowego ciągu tekstu, który wstawiasz (co zmienia rzeczywistą zawartość bufora).Oto przykład tego fragmentu. Oceń to w tymczasowym buforze.
Kiedy oni są źli?
Nakładki są znacznie bardziej wymagające (pod względem przetwarzania) niż właściwości tekstu. Niektóre istotne operacje (takie jak wstawianie tekstu, jeśli się nie mylę) zajmują czas proporcjonalny do liczby nakładek w buforze. Z tego powodu nie są odpowiednie, gdy potrzebujesz dużej ich liczby. W takim przypadku powinieneś zrezygnować z właściwości tekstu.
źródło
Nakładki i właściwości tekstu mają dokładnie takie same możliwości. Dodają marginesy zmian, przyciski, twarze, ikony z marginesów, podpowiedzi, obrazy, podświetlenia itp. Do określonej części tekstu. Istnieje jednak ogromna różnica pojęciowa:
Nakładki są niezależne , właściwości tekstu nie. Emacs ma odrębny typ nakładki, ale nie ma „typu właściwości tekstu”. Właściwości tekstu są z natury powiązane z ciągiem, na którym zostały ustawione. Z drugiej strony nakładki są dołączone do bufora.
Istnieje kilka praktycznych implikacji tej różnicy:
Istotą tego wszystkiego jest to, że możesz zarządzać nakładkami niezależnie od zawartości tekstu. Koncepcyjnie użyłbyś ich do rzeczy, które pokazałeś w buforze, nawet jeśli są one niezależne od tekstu.
Praktycznie używasz nakładek, jeśli rzeczy, które chcesz dodać do tekstu, często się zmieniają, a właściwości tekstu, jeśli rzeczy są stałe.
Na przykład Emacs używa właściwości tekstu do tworzenia przycisków i widżetów wejściowych w
M-x customize
buforze. Te widżety są tworzone raz i pozostają tam tak długo, jak bufor jest aktywny, więc nie ma potrzeby wprowadzania nakładek.Jednak Flycheck używa nakładek, aby wyróżnić błędy w buforze, ponieważ często musi usuwać i dodawać podświetlenia.
źródło