如何将字体规范属性作为参数传递给 set-face-attribute?
How to pass font-spec attributes as arguments to set-face-attribute?
假设我在变量 my-font-spec
中有一些字体规范。例如
(setq my-font-spec (font-spec :family "XYZ"
:height 120
:weight 'normal
:width 'normal))
我想将此字体规范中的属性作为 &rest
参数传递给 set-face-attribute
。 IOW,实际上,我想调用
(set-face-attribute some-face nil
:family "XYZ"
:height 120
:weight 'normal
:width 'normal)
但这样做时没有详细说明属性(正如我上面所做的),而是通过 my-font-spec
.
的某些函数间接地进行
我不确定为什么,但是调用 (font-face-attributes my-font-spec)
不会 return 您指定的 :height
属性的值:
(:family "XYZ" :weight normal :width normal)
如果是这样,您只需调用:
(apply 'set-face-attribute some-face nil (font-face-attributes my-font-spec))
但是为了确保获取所有指定属性的值,您可以使用 face-attribute-name-alist
变量获取完整的属性列表,从 [=16 检索每个属性的值(如果存在) =],然后将它们应用到 some-face
:
(let (props)
(mapcar #'(lambda (attrval)
(let* ((attr (car attrval))
(prop (font-get my-font-spec attr)))
(if prop
(progn (push prop props)
(push attr props))))) face-attribute-name-alist)
(apply 'set-face-attribute some-face nil props))
假设我在变量 my-font-spec
中有一些字体规范。例如
(setq my-font-spec (font-spec :family "XYZ"
:height 120
:weight 'normal
:width 'normal))
我想将此字体规范中的属性作为 &rest
参数传递给 set-face-attribute
。 IOW,实际上,我想调用
(set-face-attribute some-face nil
:family "XYZ"
:height 120
:weight 'normal
:width 'normal)
但这样做时没有详细说明属性(正如我上面所做的),而是通过 my-font-spec
.
我不确定为什么,但是调用 (font-face-attributes my-font-spec)
不会 return 您指定的 :height
属性的值:
(:family "XYZ" :weight normal :width normal)
如果是这样,您只需调用:
(apply 'set-face-attribute some-face nil (font-face-attributes my-font-spec))
但是为了确保获取所有指定属性的值,您可以使用 face-attribute-name-alist
变量获取完整的属性列表,从 [=16 检索每个属性的值(如果存在) =],然后将它们应用到 some-face
:
(let (props)
(mapcar #'(lambda (attrval)
(let* ((attr (car attrval))
(prop (font-get my-font-spec attr)))
(if prop
(progn (push prop props)
(push attr props))))) face-attribute-name-alist)
(apply 'set-face-attribute some-face nil props))