Actually. What I want, I think, is a function that sorts the whole buffer and then collapses all nodes.

I think your my-hide-all-drawers-in-current-subtree thing will take care of collapsing all nodes. But I'm now on StackOverflow trying to work out how to sort the whole buffer.


On 17 April 2014 14:02, Noah Slater <nslater@tumbolia.org> wrote:
Okay, wow. Thanks for writing that. Do you have a Gittip or something? I would love to support your OSS work in some way or otherwise show my gratitude beyond words in an email!

Anyway. I tried your function and it works. But afterwards, the node is completely folded. So I added (org-cycle) to the sequence of functions inside save-restriction. That seems to work, but I'm no elisp/Org pro. Is this how you would have done it?


On 17 April 2014 13:55, Bastien <bzg@gnu.org> wrote:
Noah Slater <nslater@tumbolia.org> writes:

> Okay, that seem to work.
>
> But I'm not able to get this work:
>
> (add-hook 'org-after-sorting-entries-or-items-hook
>           (lambda() (org-cycle-hide-drawers 'children)))
>
> After running the sort, all the LOGBOOK draws are still open.

Try this:

(defun my-hide-all-drawers-in-current-subtree ()
  "Hide all drawers in the current subtree."
  (save-restriction
    (org-narrow-to-subtree)
    (org-cycle-hide-drawers 'all)
    (org-cycle-internal-local)))

(add-hook 'org-after-sorting-entries-or-items-hook
          'my-hide-all-drawers-in-current-subtree)

> I'm also thinking: even if this closes the logbook draws, all the
> nodes will be unfolded. But my node tree is quite large. Is it be
> possible to refold all the nodes after n-levels?
>
> So let's say I have:
>
> * Level 1
> ** Level 2
> *** Level 3
>
> If I move the point to Level 1 and sort, I'd like it fold all Level 2
> items, but leave Level 1 unfolded.

You can fix the cycling through the hook above.

HTH,

--
 Bastien