Come inserisco il testo con una faccia specifica?


14

Ho una faccia, creata in questo modo:

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

Vorrei inserire del testo con quella faccia. Ma questi modi inseriscono il testo senza la faccia:

(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))

E anche inserire prima il testo, quindi tornare indietro per mettere la faccia su di esso non funziona:

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

Il problema non è la definizione del viso, perché se vado a personalizzarlo, si presenta già con un'altezza doppia. Anche così, anche il rivestimento del viso non funziona:

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

Quindi, come posso inserire un testo con la faccia specifica? So di poter usare un overlay, ma sembra eccessivo perché è più dettagliato, richiede prima di inserire il testo (quindi dobbiamo scoprire le dimensioni e la posizione del testo da sovrapporre) e richiede di fare più spazzatura per essere raccolto.


2
Prova gli esempi sopra in modalità fondamentale o in qualsiasi altra modalità con il blocco dei caratteri disabilitato (funzionerebbero bene). Il problema è che il blocco dei caratteri viene utilizzato anche faceper il codice di evidenziazione della sintassi, quindi sostituisce la proprietà del viso. Sono sicuro che ci deve essere un modo per disabilitare il blocco dei caratteri per un dato testo, ma dovrò cercare un po 'il codice (non c'è tempo in questo momento). Forse leggere il font-lock.elcodice darebbe qualche indizio
Iqbal Ansari,

Risposte:


15

Ci sono alcuni problemi con il codice:

  • put-text-propertyviene applicato a un oggetto. In questo caso la tua stringa. Devi passarlo come ultimo parametro.
  • put-text-property inizia a contare da zero.
  • Se font-lock-modeabilitato, eliminerà qualsiasi testo della faceproprietà.

Il seguente codice funziona, se la modalità blocco caratteri è disabilitata:

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

Se vuoi usarlo con il blocco caratteri abilitato, puoi invece impostare la proprietà font-lock-face. Ha lo stesso effetto ma non è influenzato da font-lock.


Risposta chiara e completa.
Drew
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.