Сортировать смешанный список заголовков в режиме орг

У меня есть длинный список заголовков вorg-mode:

* Tasks [/]
** TODO Foo
** TODO Bar
** DONE World
** DONE Abba

что я хочу отсортировать следующим образом:

* Tasks [/]
** TODO Bar
** TODO Foo
** DONE Abba
** DONE World

С участиемorg-sort-entries Я могу либо получить

* Tasks [/]
** DONE Abba
** TODO Bar
** TODO Foo
** DONE World

(т.е. в алфавитном порядке), или

* Tasks [/]
** TODO Foo
** TODO Bar
** DONE World
** DONE Abba

(т.е. группировка по статусу).

Другими словами, я хочу отсортироватьTODO иDONE элементы в алфавитном порядке, но держать их в два блока. Как я мог достичь этого? Я хочу сохранить весь набор заголовков в одном поддереве!

Редактировать:

Мне не удалось использовать предложения ниже. Поэтому я попытался использовать приведенные ниже советы, чтобы найти решение, которое мне нужно. Вот код, который у меня есть:

(defun drorata-sort-TODO-DONE-headings ()
  (interactive)
  (save-excursion
    ;; Sort according to the TODO/DONE keywords
    (org-sort-entries t ?o)
    ;; Now there is a block of TODO's and a block of DONE's
    ;; Mark the TODO's
    (next-line)
    (beginning-of-line)
    (set-mark-command nil)
    (search-forward-regexp "[*].* DONE" nil t)
    (beginning-of-line)
    ;; Sort the marked region (of TODO's) alphabetically
    (org-sort-entries t ?a)
    ;; Now its time to sort the DONE's
    (search-forward "[*].* DONE" nil t)
    (beginning-of-line)
    (set-mark-command nil)
    ;; How can I find all headings labeled with DONE in the current level?
    )
)

Моя идея состоит в том, чтобы отметить заголовки, которые помеченыTODO и сортировать их по алфавиту, а затем сделать то же самое сDONE Заголовки. Пока у меня это работает только дляTODO«S ...

Ответы на вопрос(4)

Ваш ответ на вопрос