我注意到,当我查看 TODO 列表时,由于我从上到下阅读,我通常只从部分的上半部分完成工作,而当我到达底部的一半时,我发现了一个 TODO这是可以做到的。所以我想知道,有没有办法混合 TODO 列表以便随机排序?
问问题
526 次
2 回答
2
Org 模式允许您按 PROPERTIES 抽屉中的键进行排序,因此一种方法是在搜索开始时在其中设置一个随机排序键。下面的代码就是这样做的。排序完成后,它会删除排序键并删除空的属性抽屉,保持原样。
(defun org-sort-entries-randomly()
(interactive)
(if (org-at-heading-p)
(progn
(setq start (point))
(org-end-of-subtree)
(while (> (point) start)
(if (org-at-heading-p)
(org-set-property "sort-key" (format "%d" (+ 10000 (random 10000)))))
(previous-line))
(org-sort-entries nil ?r nil nil "sort-key")
(goto-char start)
(org-end-of-subtree)
(while (> (point) start)
(if (org-at-heading-p)
(org-delete-property "sort-key" "PROPERTIES"))
(previous-line)))
(message "Not at heading")))
于 2016-04-23T17:12:38.187 回答
2
如前所述org-sort
,让我们指定一个函数来排序:
如果 SORTING-TYPE 是 ?f 或 ?F,则 GETKEY-FUNC 指定要调用的函数,点位于记录的开头。它必须返回一个字符串或一个数字,作为该记录的排序键。
碰巧random
的是一个返回随机数的函数。因此M-x org-sort f random
将随机化 org 文件中的排序顺序。
org-agenda
但是,您可以使用随机顺序查看待办事项,而不是更改文件。通过设置org-agenda-cmp-user-defined
,您可以自定义排序顺序。此函数将采用两个参数(要比较的议程条目)并且应该返回 -1,1 或 0,具体取决于哪个条目“更小”。这是这样一个功能:
(defun org-random-cmp (a b)
"Return -1,0 or 1 randomly"
(- (mod (random) 3) 1))
这是一个议程视图,以随机顺序显示所有 TODO 项目:
(add-to-list 'org-agenda-custom-commands
'("r" "All todo items in a random order"
alltodo ""
((org-agenda-cmp-user-defined #'org-random-cmp))))
于 2016-04-25T00:11:14.780 回答