我对如何在 elisp 中使用变量感到困惑

I am confused about how to use a variable in elisp

我尝试将字体设置如下:

  (let ((my:font "WenQuanYi Micro Hei Mono"))
    (when (member my:font (font-family-list))
      (set-face-attribute 'default nil :font my:font :width 'condensed)
      (add-to-list 'default-frame-alist
                   '(font . my:font))))

set-face-attribute 工作正常。我可以看到字体设置为 WenQuanYi。但是当我检查 default-frame-alist 的值时,它显示为 (font . my:font) 并且当我尝试创建一个新框架 (emacsclient) 时,我得到了这个错误:

*ERROR*: Invalid font: my:font

它似乎试图将值名称用作字体名称。所以我不确定什么是正确的方法。

引用列表 '(font . my:font) 生成这两个符号的一个 cons,而不是您想要的值。您可以使用反引号或调用 cons:

而不是引用
`(font ,my:font)

(cons 'font my:font)

您可能对信息页面 (info "(elisp)Quoting")(info "(elisp)Backquoting") 感兴趣,它们更详细地解释了这些结构。

顺便提一下,局部变量的 emacs lisp 词汇约定使用连字符 like-this,而不是冒号 like:this