org-capture-templates 设置的一个小问题请教

格式如:

 ("r" "Reading" entry (file+olp "~/org/books.org" "阅读书目" "2020")
             "* TODO %^{The book's name} %^g\n%^{STYLE}p")

“阅读书目”后面的那个 「2020」是当前年份,怎么用自动获取的当前年份变量替换它?

请指教。

啊~,又来一个问题,其中的 %^g 获取的 TAGS 列表好似出不来。 我没有在 .el 中定义 TAGS 列表,是在每个 org 文件中定义的。 %^g 有没有办法获取每个 org 文件中定义的 #+TAGS: 列表?

记得有个 type 是 function, 所以试试 file+olp+function, 然后 写个 function 来获取 2020.

获得年份:

(format-time-string "%Y")
;; => "2020"

如果要执行 list 中的一部分元素,改写成 list / cons 函数调用

'(1 (+ 2 3) 4)
;; => (1 (+ 2 3) 4)

(list 1 (+ 2 3) 4)
;; => (1 5 4)

如果改写比较啰嗦,可以用 Backquote 宏来减少工作量

'((a (+ 1 2))
  (b (+ 3 4)))
;; => ((a (+ 1 2)) (b (+ 3 4)))

(list (list 'a (+ 1 2))
      (list 'b (+ 3 4)))
;; => ((a 3) (b 7))

`((a ,(+ 1 2))
  (b ,(+ 3 4)))
;; => ((a 3) (b 7))

可以发现 ` 的明显简单不少,不要觉得 ` 神秘,它就是一个 Macro,自动把改成了上面的 list / cons 的形式。

Wrong type argument: stringp, (format-time-string “%Y”)

看看引号是不是中文的引号。。。

没有中文符号。

额,可能你没太看明白 @xuchunyang 的回复,大概是这样。

(add-to-list 'org-capture-templates
  `("r" "Reading" entry (file+olp "~/org/books.org" "阅读书目" ,(format-time-string "%Y"))
             "* TODO %^{The book's name} %^g\n%^{STYLE}p")

要用 backquote (`) 和逗号操作符 (,) 来做引用里面的部分求值。

按这个格式的话,报:

org-mks: Wrong type argument: stringp, \`

我再读读手册看看。

你是不是直接 (setq org-capture-templates 了,用上面的 add-to-list 方式试试。

1赞

果真如此! :ok_hand: