Як вставити текст із певним обличчям?


15

У мене є обличчя, створене таким чином:

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

Тож як я можу вписати в якийсь текст певне обличчя? Я знаю, що я можу використовувати накладку, але це здається зайвим, тому що це більш багатослівний, вимагає, щоб текст був введений спочатку (тому ми повинні з'ясувати розмір і положення тексту, щоб бути накладеними) і вимагає зробити більше сміття, щоб бути зібрані.


2
Спробуйте наведені вище приклади в основному режимі або будь-якому іншому режимі з вимкненим блокуванням шрифтів (вони будуть добре працювати) Проблема полягає в тому, що блокування шрифту також використовується faceдля виділення синтаксису коду, тому він замінює властивість обличчя. Я впевнений, що існує певний спосіб відключити блокування шрифту для певного тексту, але мені доведеться трохи вивчити код (зараз немає часу). Можливо, читання font-lock.elкоду дасть якусь підказку
Ікбал Ансарі

Відповіді:


16

У коді є деякі проблеми:

  • put-text-propertyзастосовується до об'єкта. У цьому випадку ваш рядок. Потрібно передавати його як останній параметр.
  • put-text-property починає рахувати з нуля.
  • Якщо font-lock-modeце ввімкнено, він зніме будь-який текст faceвластивості.

Наступний фрагмент коду працює, якщо режим блокування шрифту вимкнено:

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

Якщо ви хочете використовувати це з увімкненим блокуванням шрифтів, ви можете встановити властивість font-lock-faceзамість цього. Це має той же ефект, але це не впливає font-lock.


Чітка і повна відповідь.
Дрю
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.