组织模式捕获:动态文件名

时间:2018-06-15 10:45:16

标签: emacs org-mode

我见过这个:

How to type a dynamic file entry for org capture

但无法让它发挥作用;我得到“无效的文件位置:无”。 org-mode或Emacs本身有什么变化来阻止它工作?否则:关于如何调试出错的建议?

我真正努力工作的是本页描述的内容:

http://www.howardism.org/Technical/Emacs/journaling-org.html

我感兴趣的捕获模板是页面底部的“Journal Note”:

(setq org-capture-templates '(
;; ...
("j" "Journal Note"
     entry (file (get-journal-file-today))
     "* Event: %?\n\n  %i\n\n  From: %a"
     :empty-lines 1)
;; ..
))

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

想出来......它正在使用反引号代替整个捕获模板块的正常引用!我错过了这个,因为我看到的所有答案都只有一个捕获模板,前面有一个反引号;我试过这样做但是如果模板是"其中一个是"那么这不起作用。 ...

所以这里有一个比我发现的更丰富的片段;我希望它可以帮助别人。

(setq org-capture-templates
  `(("t" "TODO" entry (file+datetree "~/Documents/org/tasks.org"  "Tasks")
     "* TODO [#C] %?\n   SCHEDULED: <%<%Y-%m-%d %a>>\n  [%<%Y-%m-%d %a>]\n  %a")
   ("T" "Travel" entry (file+datetree+prompt "~/Documents/org/travel.org")
    "* %?\n  :PROPERTIES:\n  :LOCATION:\n  :END:\n  %t\n  %a")
   ("j" "Journal Note" entry (
               file+olp+datetree
               ,(concat
                 org-journal-dir
                 (format-time-string "journal-%m-%d.org")))
   "* Event: %?\n %i\n  From: %a")
   )
  )

键是捕获模板def块开始时的反引号,以及被调用函数之前(concat ...)的逗号。

答案 1 :(得分:3)

似乎Org-mode 8.2.10和9.1.9之间的某些内容发生了变化,特别是Org处理template elements的方式。而在Org的早期版本中,对(file ...)中的第二个值可能是Org将评估的函数,现在似乎只有字符串(文件路径)在此处有效。

修复是使用backquote列表表单,并明确声明该函数需要使用逗号进行评估:

(setq org-capture-templates `(
    ;; ...
    ("j" "Journal Note"
         entry (file ,(get-journal-file-today))
         "* Event: %?\n\n  %i\n\n  From: %a"
         :empty-lines 1)
    ;; ..
    ))