我在org-file
中有以下表单的任务列表change['Property.PropertyName'] which is undefined
并希望在SELECT created, sum(shipping), sum(price) from (
SELECT
o.created, o.shipping, sum(i.price) as price
FROM
test_order o,
test_item i
WHERE
i.order_id = o.id
group by o.created, o.id) subquery;
下创建可以轻松计时的子任务(例如。* Tasks
** task 1
** task 2
,* Tasks
等弹出窗口,当调用 Cu {{ 1}}。我正在考虑使用task 1
来构建任务列表但是没有通过一种简单的方式来遍历org-mode头树来创建任务?我在看{ {3}}链接,但希望有一个替代/组织API可以实现这一目标。
我也有兴趣在task 2
{{}}}之间保存时钟历史记录而不加载org-clock-in
,因为我尝试将org-clock-history-push
和destop-sessions
添加到org-mode
没有工作。
答案 0 :(得分:0)
最后,我从链接的帖子中获得了灵感。这段代码将创建并向org-clock-history
添加非“完成”的任务,因此可以通过 C-u org-clock-in
轻松访问这些任务。
(defun my-org-header-list (&optional header-re level buffer items)
"Get the headers of an org buffer (default current buffer). Optionally,
narrows to headers matching HEADER-RE under nesting LEVEL (defaults all
headers). Returns plist list of headers with specified values in ITEMS when defined.
Defaults to header text, location, level, todo status.
See `org-element-all-elements' for possible item types."
(setq level (or level 0)) ;default all headers
(save-restriction
(with-current-buffer (or buffer (current-buffer))
(goto-char (point-min))
(and header-re
(re-search-forward header-re nil nil 1)
(org-narrow-to-element))
(let ((tree (org-element-parse-buffer 'headline)))
(list :buffer (current-buffer)
:headers
(org-element-map tree 'headline
(lambda (el)
(when (< level (org-element-property :level el))
(or (and items
(cl-loop for sym in items
nconc (list sym (org-element-property sym el))))
(list :raw-value (org-element-property :raw-value el) ;text
:begin (org-element-property :begin el) ;start
:end (org-element-property :end el) ;end
:level (org-element-property :level el) ;depth
:todo-keyword (org-element-property :todo-keyword el))
)))))))))
;; construct list of tasks to choose from in clock history buffer
;; #<marker at 19296 in org-clock.el>
(defun my-org-clock-create (headers)
"Create clock tasks for headers."
(let ((buf (plist-get headers :buffer)))
(cl-loop for h in (plist-get headers :headers)
when (not (string= "DONE" (plist-get h :todo-keyword)))
do (org-clock-history-push (plist-get h :begin) buf))))
;; generate a list of TODO tasks nested under Tasks heading from
;; BUFFER-NAME
;;;###autoload
(defun my-org-clock-in (arg &optional buffer-name)
(interactive "P")
(my-org-clock-create
(my-org-header-list
(if arg (read-string "Task group: ") "Tasks") 1 (or buffer-name "gtd.org")
'(:raw-value :begin :todo-keyword))))