У меня есть лицо, созданное таким образом:
(defface test-face
'((t . (:height 2.0)))
"A face for testing.")
Я хотел бы вставить текст с этим лицом. Но эти способы вставки текста без лица:
(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))
И даже сначала вставить текст, а затем вернуться, чтобы нанести на него лицо, не получается:
(progn
(insert "text to insert")
(add-text-properties
(save-excursion
(backward-word 3)
(point))
(point)
'(face test-face)))
Проблема не в определении лица, потому что, если я настрою его, оно уже высотой в два раза больше. Несмотря на это, вставка лица также не работает:
(insert (propertize "to insert" 'face '(:height 2.0)))
Итак, как я могу вставить текст с определенным лицом? Я знаю, что могу использовать наложение, но это выглядит как излишнее, потому что оно более многословно, требует, чтобы текст был вставлен первым (поэтому мы должны выяснить размер и положение текста, который должен быть наложен) и требует, чтобы было больше мусора, чтобы быть собраны.
face
код подсветки синтаксиса, поэтому он заменяет ваше свойство face. Я уверен, что должен быть какой-то способ отключить блокировку шрифта для данного текста, но мне придется немного изучить код (сейчас нет времени). Возможно, чтениеfont-lock.el
кода даст некоторую подсказкуОтветы:
Есть некоторые проблемы с кодом:
put-text-property
применяется к объекту. В этом случае ваша строка. Вы должны передать его как последний параметр.put-text-property
начинает считать с нуля.font-lock-mode
включен, он удалит любой текстface
свойства.Следующий фрагмент кода работает, если режим блокировки шрифтов отключен:
Если вы хотите использовать это с включенной блокировкой шрифта, вы можете установить свойство
font-lock-face
вместо этого. Это имеет тот же эффект, но не зависит отfont-lock
.источник