如何插入带有特定面孔的文字?


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用于语法突出显示代码,因此它正在替换您的face属性。我确信必须有某种方法可以禁用给定文本的字体锁定,但是我将不得不稍微研究一下代码(现在没有时间)。也许阅读font-lock.el代码会提供一些线索
Iqbal Ansari

Answers:


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


清晰完整的答案。
2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.