Bindirmeler nedir?
Her şeyden önce, onlar elisp nesnelerdir. Bu daha sonra ilgili olacak.
Kendin dediğin gibi, bunlar tampon bölgelerinin üstüne uygulanan katmanları temsil ediyor. Bu katmanlar, arabellekteki gerçek metin gibi, metin özelliklerine sahiptir. Bir bindirmenin sahip olduğu normal özellikler, altındaki metne uygulanır. Ancak, bindirmelere özgü bazı özellikler vardır (metne uygulanırsa hiçbir şey yapmazlar).
Neden Faydalılar?
İki nedenden ötürü, yukarıda ima ettim:
Onlar nesneler
Bu, onları listelerde saklayabileceğiniz ve kolayca işleyebileceğiniz anlamına gelir. Özelliklerini, şu anda nerede olduklarını takip etmek zorunda kalmadan değiştirebilirsiniz. Daha da iyisi, bunları arabellekte işlerin nerede olduğunu takip etmek için kullanabilirsiniz .
Stefan'ın bu cevabı tampon bölgeleri takip etmek için kullanılan kaplamalara güzel bir örnektir. İşte kısa bir pasajı.
(let ((ol (make-overlay beg end)))
(overlay-put ol 'evaporate t)
(overlay-put ol 'my--auto-align-regexp regexp)
(push ol my--auto-align-overlays))
Hangi bölgelerin hizalanacağını ve bunların her birinde hangi regexp'in kullanılacağını kaydetmek için bindirmeleri kullanır. my--auto-align-overlays
olduğu
bindirmelerin depolandığı bir liste ve bu listeye bakarak kolayca erişilebiliyor.
Buna karşılık, bunun için metin özelliklerini kullanıyor olsaydık (mümkün olan), onlara erişmek için kolay bir yolumuz olmazdı. Metin özelliklerini bulmak için arabelleği ayrıştırmanız gerekir.
Onlar biraz daha güçlü
Yalnızca bindirmeler üzerinde etkisi olan birkaç metin özelliği vardır. Tüm listeyi
kılavuzda bulabilirsiniz . Buraya dahil etmek için çok büyük, ama işte kısa bir vurgu.
string-string
Bu özelliğin değeri, bindirmenin başında ekrana eklenecek bir dizedir. Dize arabellekte hiçbir şekilde görünmez - yalnızca ekranda görünür.
line-prefix
Bu özellik, gösterim zamanında devam etmeyen her satıra hazırlanacak bir ekran belirtimi belirtir. Kısaltmaya bakınız.
wrap-prefix
Bu özellik, gösterim zamanında her bir devam çizgisine hazırlanmak için bir ekran belirtimi belirtir. Kısaltmaya bakınız.
Özellikle, before-string
özellik, 0 genişliğinde bir kaplamada bile tamponun görüntüsünü etkilemenize izin verir. Bu, text özelliği ile yapamayacağınız bir şey. Metin özellikleriyle yaptığınız her şeyin ya mevcut bir metnin üzerinden geçmesi (bu metni gizleyebilecek) ya da eklediğiniz yeni bir metin dizisinin üzerinden geçmesi ( ara belleğin gerçek içeriğini değiştirmesi ) gerekir.
İşte bununla ilgili bir örnek pasaj. Geçici bir tamponda değerlendirin.
(overlay-put (make-overlay (point) (point)) 'before-string "Hi there!")
Ne zaman kötüler?
Kaplamalar, metin özelliklerinden çok daha zordur (akıllıca işleme). Bazı ilgili işlemler (yanılmıyorsam metin ekleme gibi) bir arabellekteki kaplama sayısı ile orantılı olarak zaman alır. Bu nedenle, çok sayıda kişiye ihtiyacınız olduğunda uygun değillerdir. Bu durumda metin özelliklerinden istifa etmelisiniz.
i text properties
, elbette.