Bindirmeler nelerdir ve bunlar metin özelliklerinden nasıl farklıdır?


23

Manuel devletler:

Sunum özellikleri açısından, arabellek metninin ekrandaki görünümünü değiştirmek için kaplamaları kullanabilirsiniz.

Adından, mevcut metnin üzerinde “katmanlar” oluşturmak için kullanılabileceğini öne sürüyor, ancak yukarıdaki açıklama, metin özelliklerinin ne yaptığına çok benzeyen metnin görünümünü değiştirdiğini gösteriyor gibi görünüyor.

Kaplamaların somut kullanımı nedir? Bu metin özellikleri ne sunmuyor? Açılır pencere, bilgi kutusu vb. Gibi bir arabellek içindeki metin üzerine metin yazmak için kullanılabilirler mi?


Bu el kitabı bölümünü bir cümlenden daha fazla okuyun. Oldukça açık bir şekilde açıklandı, IMO. Metin özelliklerinden farklılıklar dahil. Ayrıca bakınız (aynı kılavuzda) i text properties, elbette.
Drew,

Yanıtlar:


10

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-overlaysolduğ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.


12

Kaplamalar ve metin özellikleri tam olarak aynı özelliklere sahiptir. Metnin belirli bir bölümüne değişiklik marjları, düğmeler, yüzler, saçak simgeleri, araç ipuçları, görüntüler, vurgulamalar vb. Eklerler. Ancak, çok büyük bir kavramsal fark var:

Bindirmeler bağımsız , metin özellikleri değil. Emacs'in farklı bir bindirme türü var, ancak “metin özelliği türü” yok. Metin özellikleri kendiliğinden ayarlandıkları dizeye bağlanır. Öte yandan bindirmeler bir tampon belleğe eklenir.

Bu farkın birkaç pratik çıkarımı vardır:

  • Metin özelliklerini, herhangi bir arabelleğin parçası olmayan dizelerde ayarlayabilirsiniz, oysa bindirmeler için her zaman bir arabellek gerekir.
  • Bir yere eklediğiniz metin özelliklerinin bir listesini tutamazsınız; oysa bir arabellek eklenmiş bir kaplama listesini tutmak ve örneğin tüm kaplamalarınızı tek seferde silmek kolaydır.
  • Bir metinde birden fazla kaplama ayarlayan tek bir kaplamaya sahip olabilirsiniz (örneğin bir yüz, araç ipucu ve saçak simgesi), böylece bir özellik grubunu tek bir birim olarak yönetmek için bir kaplama kullanabilirsiniz; metin özellikleri için böyle bir şey. Onları ayrı ayrı ayarlarsınız ve ayrı ayrı yönetirsiniz.

Tüm bunların özü, bindirmeleri metin içeriğinden ayrı olarak yönetebilmenizdir . Kavramsal olarak, metni metinden bağımsız olsa bile tamponda göstereceğiniz şeyler için kullanırsınız.

Pratik olarak, metne eklemek istediğiniz şeyler sık ​​sık değişirse kaplamaları kullanırsınız; ancak, yazılar sabitse, metin özelliklerini kullanırsınız.

Örneğin, Emacs düğmeleri oluşturmak ve metin bileşenlerini M-x customizearabellekte girmek için metin özelliklerini kullanır . Bu widget'lar bir kez oluşturulur ve arabellek hayatta olduğu sürece orada kalır, bu nedenle bindirmeleri getirmeye gerek yoktur.

Bununla birlikte, Flycheck arabellekteki hataları vurgulamak için bindirmeler kullanır, çünkü sık sık vurgulananları kaldırması ve eklemesi gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.