我在阅读使用 Template elements (The Org Manual)
然后有一个需求就是我要在当前计时任务的entry下面进行org-capture,
那么 org-capture提供了一个 (clock)
target
‘(clock)’
File to the entry that is currently being clocked.
然后我是这么写的
("r" "Task Map Reduce" entry (clock) "%?\n %T\n %a" :clock-in t :clock-resume t)
因为我看到
entry
An Org mode node, with a headline. Will be filed as the child of the target entry or as a top-level entry. The target file should be an Org file.
可以成为target的child节点
但是测试后,发现插入template中需要明确表示headline
不然的话报错
org-capture: Capture template ‘r’: Template is not a valid Org entry or tree
需要写成
("r" "Task Map Reduce" entry (clock) "* %?\n %T\n %a" :clock-in t :clock-resume t)
就是template中要加上 *
号
但是这样就有一个问题,就是不明确要几个*
那么我看到Template elements (The Org Manual)
这里提供了 function
来获取template,
那么好像可以通过获取 当前 clock计时的entry是哪个层级的 headline,然后再加上一个 * 就可以了。
那现在问题是 function怎么写? 有传参吗?
这个是通过 org-capture--run-template-functions
来执行的。看代码能知道,是无参的函数。然后文档虽然不在 function 这一节,前两个小节里有提到 function 是无参的。
要怎么写的话,你可能得使用 org-get-heading
来当前层级。然后我不太清楚 capture 时你的 point 是哪里,可能还得移动一下。或者先用 capture 的 location 写个函数定位到位置,然后在这里再用这类函数获取信息来生成。
1 个赞
Cyven Chaney:
但是这样就有一个问题,就是不明确要几个*
这个只需要在模板里面写一个 *
就行,org-capture 会根据目标 headline 的层级帮你加上一级
1 个赞
勉勉强强写成了一个功能
(defun org-capture/does-have-statistic (checklist-or-not)
(save-excursion
(let ((cookie-re "\\(\\(\\[[0-9]*%\\]\\)\\|\\(\\[[0-9]*/[0-9]*\\]\\)\\)"))
(org-clock-goto)
;(previous-line)
(if (re-search-forward cookie-re (save-excursion (next-line) (point)) t)
(message "find it")
(org-clock-goto)
(end-of-line)
(if checklist-or-not
(insert " [/]")
(insert "[%]"))))))
(defun org-capture/task-map-reduce-checkitem-template ()
(org-capture/does-have-statistic t)
"- [ ] %? %U\n")
(defun org-capture/task-map-reduce-entry-template ()
(org-capture/does-have-statistic nil)
"* %? %U\n")
(setq org-capture-templates
'(("t" "Todo" entry (file+headline "" "Tasks") "* TODO %^{任务内容}\n %?\n %U\n %a")
("j" "Journal" entry (file+datetree (concat org-directory "/journal.org")) "* %?\nEntered on %U\n %i\n %a")
("r" "Clocked Task Map Reduce")
("rc" "Checklist form" checkitem (clock) (function org-capture/task-map-reduce-checkitem-template) )
("ri" "Item form" entry (clock) (function org-capture/task-map-reduce-entry-template) :clock-in t :clock-resume t)))
实现的功能,比方说你正在focus一个任务,一般focus的任务打开了clock,然后任务中发现要拆解任务,使用 org-capture, 可以将任务添加成当前计时任务的子任务,并在heading处添加 statistic [%] [/]