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

Jef*_*lon 6 emacs org-mode

我见过这个:

如何为组织捕获键入动态文件条目

但不能让它工作;我收到“无效的文件位置:nil”。在 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)
;; ..
))
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助。

Jef*_*lon 10

想通了……它对整个捕获模板块使用反引号而不是普通引号!我错过了这一点,因为我看到的所有答案都只有一个捕获模板,前面有一个反引号;我尝试这样做,但如果模板是“其中之一”,则这不起作用......

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

(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")
   )
  )
Run Code Online (Sandbox Code Playgroud)

键是捕获模板 def 块开头的反引号 ` 和被调用函数上的 (concat ... ) 之前的逗号。


Mar*_*eck 6

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

解决方法是使用反引号列表形式,并明确声明该函数需要使用逗号进行评估:

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