RNA*_*RNA 3 lisp emacs elisp org-mode
我在.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")))
Run Code Online (Sandbox Code Playgroud)
因此,我想用一个变量来指定: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"))
))
Run Code Online (Sandbox Code Playgroud)
一种方法是使用`(反引号)和,(逗号).从GNU Emacs Lisp参考手册,
Backquote构造允许您引用列表,但有选择地评估该列表的元素.在最简单的情况下,它与特殊形式相同
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"))
))
Run Code Online (Sandbox Code Playgroud)