From mboxrd@z Thu Jan 1 00:00:00 1970 From: Adam Spiers Subject: FR: headline iteration API Date: Fri, 30 May 2008 13:46:19 +0100 Message-ID: <20080530124619.GB9520@atlantic.linksys.moosehall> Reply-To: Adam Spiers Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1K2401-0007n8-IG for emacs-orgmode@gnu.org; Fri, 30 May 2008 08:46:25 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1K2400-0007mw-W5 for emacs-orgmode@gnu.org; Fri, 30 May 2008 08:46:25 -0400 Received: from [199.232.76.173] (port=59880 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1K2400-0007mq-OK for emacs-orgmode@gnu.org; Fri, 30 May 2008 08:46:24 -0400 Received: from mail.beimborn.com ([70.84.38.100]:56963) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1K23zz-0004jq-Uu for emacs-orgmode@gnu.org; Fri, 30 May 2008 08:46:24 -0400 Received: from mail.beimborn.com (localhost.localdomain [127.0.0.1]) by mail.beimborn.com (8.12.11.20060308/8.12.8) with ESMTP id m4UCkMbb015890 for ; Fri, 30 May 2008 07:46:22 -0500 Received: from localhost (localhost [[UNIX: localhost]]) by mail.beimborn.com (8.12.11.20060308/8.12.11/Submit) id m4UCkMSl015885 for emacs-orgmode@gnu.org; Fri, 30 May 2008 13:46:22 +0100 Content-Disposition: inline List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: org-mode mailing list Hi all, I would like to propose a new extensibility feature: an API for iterating over all the headlines in a given buffer/file or set of buffers/files. In a manner similar to mapcar, this would allow you to execute an elisp function for each headline which could do anything you want. It would *not* have any mandatory side-effects such as modifying any buffer etc. - that would be left to the extension developer to do. Having said that, an API set of helper functions for things like "increase the priority of this headline" or "add a tag to this headline" would enrich the possible applications, although those helper functions probably mostly exist already, even if they are not explicitly documented as an API at the moment? Anyway, example use cases: - Generating custom reports containing arbitrary combinations of things like the following: - (count of number of) items ... - grouped by TODO keyword state - grouped by tag - grouped by category - grouped by "area of responsibility" - grouped by priority - with a scheduled date/time - with a scheduled date/time in the past - with a scheduled date/time within a certain period - with a deadline - with a deadline missed - with a deadline within a certain period - amount of time scheduled for a particular type of TODO/tag/category/priority (e.g. to ensure that you are planning to spend your time evenly across various areas of responsibility, this would greatly assist with GTD-like "30,000ft and above" reviews) - actions taken during minuting of a meeting, grouped by owner I am sure there are many other really cool ideas which the community could come up with. Reports could even be auto-generated via `after-save-hook' or similar. Obviously the agenda generation code has a lot of sophisticated iteration capabilities already built in - without looking at the code, I am wildly guessing that with some refactoring this logic could maybe be reused, so that a new headline iteration API would support existing mechanisms such as tag searches, org-agenda-skip, and sorting? If so, IMHO that would be really amazingly powerful :-) Would be very interested in everyone's thoughts. Thanks! Adam