我在.emacs文件中使用以下代码来设置默认发布行为。我将org基目录放在差异计算机的不同位置:
;; define machine specific directories storing my org files
(cond ((system-name-is-home) (setq org-dir "/data/org"))
((system-name-is-work) (setq org-dir "~/org")))
因此,我想使用变量将:base-directory
指定为org-dir
,而不是将其硬编码为"~/org"
。我怎么能这样做?
(require 'org-publish)
(setq org-publish-project-alist
'(
("org-notes"
:base-directory "~/org"
:base-extension "org"
:publishing-directory "~/tmp/"
:recursive t
:publishing-function org-publish-org-to-html
:headline-levels 4
:auto-preamble t
:auto-sitemap t ; Generate sitemap.org automagically ...
:sitemap-filename "sitemap.org" ; ... call it sitemap.org (the default) ...
:sitemap-title "Sitemap" ; ... with title 'Sitemap'.
)
("org-static"
:base-directory "~/org"
:base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf"
:publishing-directory "~/tmp/"
:recursive t
:publishing-function org-publish-attachment
)
("org" :components ("org-notes" "org-static"))
))
答案 0 :(得分:5)
一种方法是使用`
(反引号)和,
(逗号)。来自GNU Emacs Lisp Reference Manual,
反引号构造允许引用列表,但有选择地评估该列表的元素。在最简单的情况下,它与特殊形式
quote
相同。 (...)反引号参数内的特殊标记“,
”表示不是常量的值。 Emacs Lisp评估程序评估“,
”的参数,并将值放在列表结构中。
所以你可以按如下方式编写你的程序:
(require 'org-publish)
(setq org-publish-project-alist
`( ; XXX: backquote
("org-notes"
:base-directory ,org-dir ; XXX: comma
:base-extension "org"
:publishing-directory "~/tmp/"
:recursive t
:publishing-function org-publish-org-to-html
:headline-levels 4
:auto-preamble t
:auto-sitemap t
:sitemap-filename "sitemap.org"
:sitemap-title "Sitemap"
)
("org-static"
:base-directory ,org-dir ; XXX: comma
:base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf"
:publishing-directory "~/tmp/"
:recursive t
:publishing-function org-publish-attachment
)
("org" :components ("org-notes" "org-static"))
))