Рандомизировать список TODO?

Я заметил, что, когда я смотрю на список TODO, я обычно делаю дела только из верхней половины части, так как я читаю сверху вниз, и к тому времени, когда я дохожу до середины списка TODO, я нахожу TODO. это можно было сделать. Поэтому мне было интересно, есть ли способ перепутать список TODO, чтобы порядок был случайным?


person THIS USER NEEDS HELP    schedule 22.04.2016    source источник
comment
Почему бы не поиграть с org-sort-entries и каждый раз сортировать его по-разному в зависимости от настроения? M-x describe-function RET org-sort-entries RET   -  person lawlist    schedule 22.04.2016
comment
@lawlist Я использую контексты из GTD для отображения разных повесток дня для разных ситуаций, но у меня есть одна основная повестка дня, которую я использую чаще всего независимо от контекстов, и именно этот список я хотел рандомизировать. Кроме того, я не даю много мета-атрибутов записям TODO, поэтому многие опции из org-sor-entries мне не подходят.   -  person THIS USER NEEDS HELP    schedule 22.04.2016
comment
В нижней части строки документа говорится об использовании параметров для ?f и ?F, то есть вы можете написать свои собственные функции сортировки (например, рандомизировать) и включить их в функциональность org-sort-entries. Возможно, кто-то напишет, если вам понадобится помощь, и вы всегда сможете предложить вознаграждение через несколько дней, если никто не ответил.   -  person lawlist    schedule 22.04.2016
comment
@lawlist А, спасибо. К сожалению, моему навыку шепелявости не хватает глубины, и мне понадобится помощь, чтобы достичь этого.   -  person THIS USER NEEDS HELP    schedule 22.04.2016


Ответы (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))))
person erikstokes    schedule 25.04.2016
comment
Для правильной сортировки функция сортировки должна возвращать один и тот же результат при сравнении двух сущностей. Если вы рандомизируете его, сортировка может никогда не закончиться. - person justinhj; 25.04.2016
comment
Хм. Не могли бы вы подтвердить, что это работает? Кажется, это не меняет никакого порядка на моем. Однако функция org-random-cmp работает по назначению. Кроме того, предполагается ли рандомизировать порядок каждый раз, когда вы открываете организационную повестку дня? - person THIS USER NEEDS HELP; 05.05.2016
comment
Вы имеете в виду функцию org-sort или просмотр повестки дня? Оба работают для меня. Представление повестки дня предназначено для рандомизации каждый раз, когда вы открываете повестку дня. - person erikstokes; 05.05.2016
comment
@justinhj Это правда, но маловероятно, что сортировка никогда не прекратится. Я почти уверен, что он завершается с вероятностью 1. Вероятно, это займет больше времени, чем обычная сортировка, но не настолько, чтобы это имело значение. - person erikstokes; 05.05.2016

Организационный режим позволяет вам сортировать по ключу в ящике 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")))
person justinhj    schedule 23.04.2016