Ordenar una lista mixta de encabezados en modo org

Tengo una larga lista de encabezados enorg-mode:

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

que quiero ordenar de la siguiente manera:

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

Conorg-sort-entries Yo puedo obtener

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

(es decir, orden alfabético), o

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

(es decir, agrupación según el estado).

En otras palabras, quiero ordenar elTODO y elDONE artículos alfabéticamente, pero manténgalos en dos bloques. ¿Cómo podría lograrlo? ¡Quiero mantener todo el conjunto de encabezados en el mismo subárbol!

Editar:

No logré utilizar las sugerencias a continuación. Entonces, intenté usar los consejos que se proporcionan a continuación para encontrar la solución que necesito. Aquí está el código que tengo:

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

Mi idea es marcar los encabezados etiquetados porTODO y ordenarlos alfabéticamente y luego hacer lo mismo con elDONE encabezados Hasta ahora, lo tengo funcionando solo paraTODO's ...