faces – ¿Cómo inserto texto con una cara específica?

Pregunta:

Tengo una cara, creada de esta manera:

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

Me gustaría insertar un texto con esa cara. Pero estas formas insertan el texto sin la cara:

(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 incluso insertar el texto primero y luego volver a ponerle la cara no funciona:

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

El problema no es la definición de la cara, porque si la personalizo, ya está apareciendo con el doble de altura. Aun así, alinear la cara tampoco funciona:

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

Entonces, ¿cómo puedo poner un texto con la cara específica? Sé que puedo usar una superposición, pero eso parece una exageración porque es más detallado, requiere que el texto se inserte primero (por lo que tenemos que averiguar el tamaño y la posición del texto que se va a superponer) y requiere hacer más basura para ser recogido.

Respuesta:

Hay algún problema con el código:

  • put-text-property se aplica a un objeto. En este caso su string. Debe pasarlo como último parámetro.
  • put-text-property comienza a contar desde cero.
  • Si font-lock-mode está habilitado, eliminará cualquier texto de la propiedad de la face .

El siguiente fragmento de código funciona, si el modo de bloqueo de fuente está desactivado:

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

Si desea utilizar esto con font-lock habilitado, puede establecer la propiedad font-lock-face lugar. Tiene el mismo efecto pero no se ve afectado por font-lock .

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım