From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bernt Hansen Subject: Re: manipulating the agenda from elisp? Date: Thu, 07 Apr 2011 23:34:07 -0400 Message-ID: <87bp0h2z80.fsf@norang.ca> References: Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from [140.186.70.92] (port=43143 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q82SZ-0007rL-Q7 for emacs-orgmode@gnu.org; Thu, 07 Apr 2011 23:34:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q82SY-0007tz-Fk for emacs-orgmode@gnu.org; Thu, 07 Apr 2011 23:34:11 -0400 Received: from mho-01-ewr.mailhop.org ([204.13.248.71]:59403) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q82SY-0007tb-CZ for emacs-orgmode@gnu.org; Thu, 07 Apr 2011 23:34:10 -0400 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: "Filippo A. Salustri" Cc: emacs-orgmode@gnu.org "Filippo A. Salustri" writes: > Hi, > I'm thinking I might like to try some programming to do things to the > agenda from an elisp function. > I tried 'apropos agenda' but I didn't really see the kind of thing > I'm looking for. > What I'm hoping is for some way to iterate over each item in the > agenda, and be able to access the content of the item in some > structured way. > I think I've seen functions that can pull info like TODO state and > priority from the item under the cursor, so it's the iteration part > that I'm really interested in. > > Any advice? Hi Fil, I just found the B f code to execute an arbitrary function on marked entries in the agenda. Maybe this will help? This following code visits the marked entries and just displays the heading for the task. Mark multiple entries in the agenda with 'm' and then 'B f bh/test RET' should display the heading of each marked task in the *Messages* buffer. --8<---------------cut here---------------start------------->8--- (defun bh/test () (interactive) (let* ((marker (or (org-get-at-bol 'org-marker) (org-agenda-error))) (buffer (marker-buffer marker)) (pos (marker-position marker))) (with-current-buffer buffer (if (org-mode-p) (save-excursion (goto-char pos) (message "%s" (nth 4 (org-heading-components)))))))) --8<---------------cut here---------------end--------------->8--- Depending on what you want to do you can either act on marked entries or create a custom agenda skip function that can visit the tasks as the agenda is built. HTH, Bernt