我想在中使用预定义的变量或字符串类型的常量 (custom-theme-set-faces)
,因此它会像
(setq Blue128 "#000080")
(custom-theme-set-faces
'thename
'(default ((t (
:background Blue128))))
)
如果我尝试按上述方法表述,则会得到类型不匹配的情况:
Wrong type argument: stringp, Blue128
还尝试了defvar
、defconst
、let
。在“Emacs 手册”、“Emacs Lisp 参考”和“Emacs Lisp 编程”中寻找答案。也可以在搜索引擎中查找。
实际起作用的是:
(setq Blue128 "#000080")
(custom-theme-set-faces
'thename
'(default ((t (
:background "#000000"))))
)
(set-face-attribute 'default nil :background Blue128)
...这不是我想要的。
“面部属性”实际上是“符号属性”,对吗?看起来范围和/或“评估顺序”有些微妙,但我找不到它是什么。
答案1
结论:使用反引号和逗号代替引号。
该问题涉及 elisp'(exp)
引用语法:它告诉解释器不要评估以下表达式,而是将其视为常量(在本例中是稍后要评估的表达式custom-theme-set-faces
,它将解析出它的参数并获取它们的值)。
引用手动的引用:
这提供了一种包含常量符号和列表的方法,它们不是自评估对象
因此,如果我理解正确的话,我们遇到的错误发生在某个地方,custom-theme-set-faces
因为它需要一个文字stringp
,而不是一个需要评估的符号。
答案是使用`(exp)
反引号语法,它的作用是一样的,只不过允许你指定元素做想要立即评估,使用附带的,symbol
逗号语法来标记您现在需要评估的内容。再次手动。
所以你的代码应该是:
(setq Blue128 "#000080")
(custom-theme-set-faces
'thename
`(default ((t (
:background ,Blue128))))
)
这是一个非常晚的答案,但是为了其他业余 elisp 黑客的利益而提供的......