我注意到,当我查看TODO列表时,我通常只是从上到下读取部分的上半部分完成的事情,当我到达底部的时候,我找到可以完成的TODO。所以我想知道,有没有办法混淆TODO列表,以便排序是随机的?
答案 0 :(得分:2)
组织模式允许您按属性抽屉中的键进行排序,因此一种方法是在搜索开始时在其中设置随机排序键。以下代码就是这样做的。排序完成后,它会删除排序键并删除空属性抽屉,保留原样。
(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")))
答案 1 :(得分:2)
如上所述org-sort
让我们指定一个按以下方式排序的函数:
如果SORTING-TYPE是?f或?F,那么GETKEY-FUNC指定一个函数 在记录的开头用点调用。它必须返回 应该作为该记录的排序键的字符串或数字。
碰巧random
是一个返回随机数的函数。因此M-x org-sort f random
将随机化组织文件中的排序顺序。
但是,您可以使用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))))