随机化TODO列表?

时间:2016-04-22 00:23:20

标签: random emacs org-mode spacemacs

我注意到,当我查看TODO列表时,我通常只是从上到下读取部分的上半部分完成的事情,当我到达底部的时候,我找到可以完成的TODO。所以我想知道,有没有办法混淆TODO列表,以便排序是随机的?

2 个答案:

答案 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))))