我有一个使用ox-publish的工作设置,现在我正在尝试组织它。我的问题是我无法将变量分配给关键字符号,如下面的代码段所示。
(setq my-org-base-dir "~/documents/todo")
(setq my-org-exp-dir "~/documents/todo_html")
(require 'ox-publish)
(setq org-publish-project-alist
'(
("org-notes"
:base-directory my-org-base-dir
:base-extension "org"
; ....
)
("org-static"
:base-directory my-org-base-dir
; ....
)
("org" :components ("org-notes" "org-static"))
))
使用:base-directory "~/documents/todo"
工作正常,但如果我尝试使用变量(:base-directory my-org-base-dir
)中的值,当我尝试导出时,emacs会给我Wrong type argument: stringp, org-base-dir
。
如何为关键字分配值?
答案 0 :(得分:1)
当你这样做时
(setq org-publish-project-alist '( ... ))
您将 org-publish-project-alist 的值设置为文字列表。并不是说您不能为关键字[参数]"分配值,而是列表的引用会阻止对其中的变量进行评估。例如,
(let ((a 1) (b 2) (c 3))
(setq foo '(a b c)))
;=> (a b c)
; *not* (1 2 3)
获取变量"插值"您需要使用 list 来构建列表,或者使用反引号以便您可以拼接值。例如,
(setq org-publish-project-alist
`( ;; backquote (`), not quote (')
("org-notes"
:base-directory ,my-org-base-dir ;; comma (,) to splice value in
:base-extension "org"
; ....
)
("org-static"
:base-directory ,my-org-base-dir ;; comma (,)
; ....
)
("org" :components ("org-notes" "org-static"))
))
答案 1 :(得分:0)
编辑:我想我可能误解了这个问题。这回答了标题中的问题,但看起来并不是OP遇到的问题。
您无法为关键字指定值。从Emacs Lisp手册(重点补充):
11.2 Variables that Never Change
在Emacs Lisp中,某些符号通常会对自己进行评估。这些 包括nil和t,以及名称以':'开头的任何符号 (这些被称为关键字)。 这些符号不能反弹,也不能反弹 它们的值会被改变。任何设置或绑定nil或t的尝试都会发出信号 设定常数误差。关键字(一个符号的关键字)也是如此 名称以':'开头),如果它是在标准obarray中实现的, 除了将这样的符号设置为自身不是错误。