Emacs Org-mode - динамически экспортировать в другой каталог?

Я построил такую ​​функцию в lisp:

(defun set-web-hosting (hosting)
 """ this function sets the hosting of web to specific tramp like target """
(setq org-publish-project-alist
    '(
      ("belohrad.ch-notes"
       :base-directory "~/SVN/fiweb/"
       :base-extension "org"
   :publishing-directory hosting
       :recursive t
       :publishing-function org-publish-org-to-html
       :headline-levels 999
       :table-of-contents nil
       :section-numbers nil
       :auto-preamble t
       :auto-sitemap t
       :auto-postamble nil
       :style ""
       :sitemap-filename "sitemap.org"
       :sitemap-title "Sitemap"
       :sub-superscript nil
       :author "David Belohrad"
       :email "david@belohrad.ch"
       )
      ("belohrad.ch-static"
       :base-directory "~/SVN/fiweb"
       :base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf\\|deb"
   :publishing-directory hosting
       :recursive t
       :publishing-function org-publish-attachment
       )
      ("web" :components ("belohrad.ch-static" "belohrad.ch-notes"))
      )))

Думая, что я могу использовать

(set-web-hosting "~/afs/www/org/")

установить мою цель на упомянутый тестовый каталог, и

(set-web-hosting ".ssh:nlanla@nlsnls.org:/public_html/")

настроить его на жизнь в сети.

Это не работает, потому что "хостинг" в функции не рассматривается как переменная, а "что-то еще". Когда публикация вызывается, она заканчивается

org-publish-file: Wrong type argument: arrayp, hosting

Как я могу правильно настроить :publishing-directory имущество?

1 ответ

Существует специальная идиома для манипулирования кодом lisp, обратной кавычкой и запятой:

`(a ,b c)

увидеть

(describe-function '\`)

И ваша установка:

(defun set-web-hosting (hosting)
  " this function sets the hosting of web to specific tramp like target "
  (eval `(setq org-publish-project-alist
           '(
         ("belohrad.ch-notes"
          :base-directory "~/SVN/fiweb/"
          :base-extension "org"
          :publishing-directory ,hosting
          :recursive t
          :publishing-function org-publish-org-to-html
          :headline-levels 999
          :table-of-contents nil
          :section-numbers nil
          :auto-preamble t
          :auto-sitemap t
          :auto-postamble nil
          :style ""
          :sitemap-filename "sitemap.org"
          :sitemap-title "Sitemap"
          :sub-superscript nil
          :author "David Belohrad"
          :email "david@belohrad.ch"
          )
         ("belohrad.ch-static"
          :base-directory "~/SVN/fiweb"
          :base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf\\|deb"
          :publishing-directory ,hosting
          :recursive t
          :publishing-function org-publish-attachment
          )
         ("web" :components ("belohrad.ch-static" "belohrad.ch-notes"))
         ))))
Другие вопросы по тегам