Random 随机化待办事项列表?

Random 随机化待办事项列表?,random,emacs,org-mode,spacemacs,Random,Emacs,Org Mode,Spacemacs,我注意到,当我查看待办事项列表时,我通常只从上半部分开始做事情,因为我从上到下阅读,当我读到下半部分时,我发现一个可以完成的待办事项。所以我想知道,有没有一种方法可以将待办事项列表混合起来,从而使排序是随机的?Org模式允许您按属性抽屉中的键进行排序,因此一种方法是在搜索开始时在其中设置一个随机排序键。下面的代码就是这样做的。排序完成后,它会删除排序键并删除空的属性抽屉,使内容保持原样 (defun org-sort-entries-randomly() (interactive) (i

我注意到,当我查看待办事项列表时,我通常只从上半部分开始做事情,因为我从上到下阅读,当我读到下半部分时,我发现一个可以完成的待办事项。所以我想知道,有没有一种方法可以将待办事项列表混合起来,从而使排序是随机的?

Org模式允许您按属性抽屉中的键进行排序,因此一种方法是在搜索开始时在其中设置一个随机排序键。下面的代码就是这样做的。排序完成后,它会删除排序键并删除空的属性抽屉,使内容保持原样

(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")))

如前所述,让我们指定排序依据的函数:

如果排序类型为?f或?f,则GETKEY-FUNC指定要执行的函数 以记录开头的点调用。它也必须返回 应该用作该记录排序键的字符串或数字

碰巧
random
是一个返回随机数的函数。因此
M-x org sort f random
将随机化org文件中的排序顺序

但是,您可以使用
org agenda
以随机顺序查看TODO,而不是更改文件。通过设置用户定义的组织,您可以自定义排序顺序。此函数将接受两个参数(要比较的议程条目),并根据哪个条目“较小”返回-1、1或0。下面是这样一个函数:

(defun org-random-cmp (a b)
  "Return -1,0 or 1 randomly"
  (- (mod (random) 3) 1))
下面是一个议程视图,它以随机顺序显示所有待办事项:

(add-to-list 'org-agenda-custom-commands
  '("r" "All todo items in a random order"
    alltodo ""
    ((org-agenda-cmp-user-defined #'org-random-cmp))))

为什么不使用
org排序条目
,并根据您的心情每次以不同的方式进行排序<代码>M-x描述函数RET org排序条目RET@lawlist我确实使用GTD中的“上下文”来显示不同情况下的不同议程,但我有一个主要议程,无论上下文如何,我最常使用,我想随机化的就是这个列表。另外,我没有给TODO条目赋予太多的元属性,所以来自
组织或条目的许多选项对我来说都不起作用。在文档字符串的底部,它谈到了使用
?f
?f
的选项,也就是说,您可以编写自己的排序函数(例如,随机化)并将其纳入
组织排序条目的功能中。如果你需要帮助,也许有人会写出来,如果没有人回应,你可以在几天内提供悬赏。@lawlist啊,谢谢你。不幸的是,我的lisp技能缺乏深度,需要一些帮助才能正确排序。在比较两个实体时,排序函数应该返回相同的结果。如果你随机化,排序可能永远不会结束。你能确认一下吗?我的订单似乎没有改变<代码>组织随机cmp
功能按预期工作。此外,这是否应该在每次打开组织议程时随机化顺序?您是指
组织排序
功能还是议程视图?这两个都对我有用。“议程”视图的目的是在每次打开议程时随机化。@justinhj这是真的,但排序不太可能永远不会终止。我很确定它以概率1终止。这可能需要比正常情况下更长的时间,但这并不重要。