Проблема в том, что цитирование второго аргумента в (setq org-publish-project-alist '(...))
означает, что ничего в этой структуре списка не будет оцениваться. Другими словами, Emacs говорит вам, что значение (concat home "org")
не является строкой: на самом деле это список из трех элементов (который при оценке даст вам строку).
Одним из возможных путей решения этой проблемы может быть использование механизма «обратной цитаты» или «квазицитаты», который аналогичен quote
или '
, но позволяет выборочно объединять биты оцененного кода Лиспа, используя ,
и * 1008. *. (Подробнее см. (elisp)Backquote
в руководстве Info). Таким образом, вы можете изменить свой код выше на что-то вроде
(setq org-publish-project-alist
`( ; note ` instead of '
("org-notes"
;; Note commas , in front of code to evaluate
:base-directory ,(concat home "org/")
:base-extension "org"
:publishing-directory ,(concat home "../public_html/")
....
Обратите внимание, что кусочки без кавычек будут оцениваться и вставляться в список только один раз, когда оценивается форма (setq ...)
: другими словами, это не поможет вам, если вам нужно, чтобы эти значения динамически изменялись для другого проекта каталоги. Но так как вы определяете home
как константу, может это не имеет значения?
PS: Если вам нужно более подробно выяснить, откуда происходят ваши wrong-type-argument
ошибки, попробуйте выполнить M-x toggle-debug-on-error
или оценить (setq debug-on-error t)
, чтобы получить подробный обратный след.