Belirli bir yüze nasıl metin eklerim?


15

Bu şekilde yaratılan bir yüzüm var:

(defface test-face
  '((t . (:height 2.0)))
  "A face for testing.")

O yüze biraz metin eklemek istiyorum. Ancak bu yollar metni yüzü olmadan ekler:

(insert (propertize "text to insert" 'face 'test-face))

(let ((current-string "text to insert"))
  (put-text-property 1 (length current-string) 'face 'test-face)
  (insert current-string))

Ve önce metni eklemek, daha sonra yüzünü koymak için geri dönmek işe yaramaz:

(progn
  (insert "text to insert")
  (add-text-properties
   (save-excursion
     (backward-word 3)
     (point))
   (point)
   '(face test-face)))

Sorun yüzün tanımı değil, çünkü eğer onu özelleştirirsem, zaten iki kat daha büyük bir yükseklikle ortaya çıkıyor. Yine de, yüzün çizgiselleştirilmesi de işe yaramaz:

(insert (propertize "to insert" 'face '(:height 2.0)))

Peki, belirli bir yüzle nasıl bir metin koyabilirim? Bir bindirme kullanabileceğimi biliyorum, ancak bu daha fazla ayrıntılı gibi görünüyor, çünkü daha ayrıntılı, önce metnin eklenmesini gerektiriyor (bu yüzden üst üste yerleştirilecek metnin boyutunu ve konumunu bulmalıyız) ve daha fazla çöp yapılmasını gerektiriyor toplanmış.


2
Yukarıdaki örnekleri temel modda veya yazı tipi kilidi devre dışı bırakılmış herhangi bir modda deneyin (iyi çalışırlar). Sorun, font kilidinin facesözdizimi vurgulama kodu için de kullanılmasıdır , bu nedenle yüz özelliğinizin yerini almaktadır. Belirli bir metin için yazı tipi kilidi devre dışı bırakmak için bir yol olmalı eminim ama biraz kod araştırmak zorunda kalacak (şu anda zaman yok). Belki de font-lock.elkodu okumak biraz ipucu verebilir
Iqbal Ansari

Yanıtlar:


16

Kodla ilgili bir sorun var:

  • put-text-propertybir nesneye uygulanır. Bu durumda dizeniz. Son parametre olarak iletmeniz gerekir.
  • put-text-property sıfırdan saymaya başlar.
  • Eğer font-lock-modeetkinleştirildiğinde, bu herhangi biri metin şerit olacak facemülkiyet.

Yazı tipi kilidi modu devre dışıysa, aşağıdaki kod parçası çalışır:

(let ((current-string "text to insert"))
  (put-text-property 0 (length current-string) 'face 'font-lock-warning-face
                     current-string)
  (insert current-string))

Bunu yazı tipi kilidi etkinken kullanmak istiyorsanız, özelliği ayarlayabilirsiniz font-lock-face. Aynı etkiye sahiptir, ancak bundan etkilenmez font-lock.


Açık ve eksiksiz cevap.
Drew
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.