Emacs 如何嵌套各种“属性化”?

Emacs 如何嵌套各种“属性化”?,emacs,elisp,emacs-faces,Emacs,Elisp,Emacs Faces,我想做与elisp等效的 <font color="red">normal<b>bold</b></font> 然而“red”属性覆盖了“bold”属性,我最终得到了 #("normalbold" 0 6 (font-lock-face (:foreground "red")) 6 10 (font-lock-face (:foreground "red"))) 这可行吗 谢谢 我不认为可以使用elisp提供的函数进行

我想做与elisp等效的

 <font color="red">normal<b>bold</b></font>
然而“red”属性覆盖了“bold”属性,我最终得到了

#("normalbold" 0 6
  (font-lock-face
   (:foreground "red"))
  6 10
  (font-lock-face
   (:foreground "red")))
这可行吗


谢谢

我不认为可以使用elisp提供的函数进行嵌套。建议分别为字符串的每个部分设置属性,然后将它们连接起来:

" 要在字符串的各个部分上放置不同的属性,可以使用propertize构造每个部分,然后将它们与concat组合:

      (concat
       (propertize "foo" 'face 'italic
                   'mouse-face 'bold-italic)
       " and "
       (propertize "bar" 'face 'italic
                   'mouse-face 'bold-italic))
           ⇒ #("foo and bar"
                       0 3 (face italic mouse-face bold-italic)
                       3 8 nil
                       8 11 (face italic mouse-face bold-italic))
"

在你的情况下,它看起来像:

(concat (propertize "normal" 'font-lock-face '(:foreground "red" ))
        (propertize "bold" 'font-lock-face '(:foreground "red" :weight bold)))
如果不了解更多关于用例的信息,我无法确定这是否适用于您。如果没有,您可以尝试使用
添加文本属性
(文档中也有描述),您可以使用它有状态地修改字符串的文本属性

(concat (propertize "normal" 'font-lock-face '(:foreground "red" ))
        (propertize "bold" 'font-lock-face '(:foreground "red" :weight bold)))