emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
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

  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).