From: Carsten Dominik <carsten.dominik@gmail.com>
To: "Ryan C. Thompson" <rct@thompsonclan.org>
Cc: org-mode Mailinglist <emacs-orgmode@gnu.org>
Subject: Re: Useful utility function: org-sort-multi
Date: Sun, 30 Aug 2009 10:09:01 +0200 [thread overview]
Message-ID: <EFD6ED4B-20EE-435B-BAF2-7ACFE93ED1B7@gmail.com> (raw)
In-Reply-To: <4A988678.6020202@gmail.com>
On Aug 29, 2009, at 3:38 AM, Ryan C. Thompson wrote:
> I found myself having to sort by multiple criteria, and I was doing
> it with multiple calls to org-sort-entries-or-items. Then I decided
> to abstract the repetition into a function. Here it is:
>
> (defun org-sort-multi (&rest sort-types)
> "Sort successively by a list of criteria, in descending order of
> importance.
> For example, sort first by TODO status, then by priority, then by
> date, then alphabetically, case-sensitive.
> Each criterion is either a character or a cons pair (BOOL . CHAR),
> where BOOL is whether or not to sort case-sensitively, and CHAR is
> one of the characters defined in ``org-sort-entries-or-items''.
> So, the example above could be accomplished with:
> (org-sort-multi ?o ?p ?t (t . ?a))"
> (interactive)
> (mapc #'(lambda (sort-type)
> (when (characterp sort-type) (setq sort-type (cons nil
> sort-type)))
> (org-sort-entries-or-items (car sort-type) (cdr sort-
> type)))
> (reverse sort-types)))
>
> Note the call to reverse. This makes it so that the first criterion
> you provide is the dominant criterion. Try it out to see how it
> works, and let me know if there's a better way to pass the arguments.
>
> Just as an example, the particular sorting function I wanted to
> write now becomes this:
>
> (defun org-sort-custom ()
> "Sort children of node by todo status and by priority and by date,
> so the * TODO [#A] items with latest dates go to the top."
> (interactive)
> (org-sort-multi ?o ?p ?T))
Hi Ryan,
this looks interesting, but I am not sure I understand how it works.
It looks to me that each sorting step will completely re-sort the entire
list of items, so the final sorting will win in the end.
Or am I missing something here?
- Carsten
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Remember: use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
next prev parent reply other threads:[~2009-08-30 8:09 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-29 1:38 Useful utility function: org-sort-multi Ryan C. Thompson
2009-08-30 8:09 ` Carsten Dominik [this message]
2009-08-30 8:33 ` Benjamin Andresen
2009-08-30 20:55 ` Ryan C. Thompson
2009-08-31 5:40 ` Carsten Dominik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=EFD6ED4B-20EE-435B-BAF2-7ACFE93ED1B7@gmail.com \
--to=carsten.dominik@gmail.com \
--cc=emacs-orgmode@gnu.org \
--cc=rct@thompsonclan.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).