emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* manipulating the agenda from elisp?
@ 2011-04-08  2:05 Filippo A. Salustri
  2011-04-08  3:34 ` Bernt Hansen
  2011-04-08 16:36 ` Bastien
  0 siblings, 2 replies; 8+ messages in thread
From: Filippo A. Salustri @ 2011-04-08  2:05 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 768 bytes --]

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?
Cheers.
Fil

-- 
Filippo A. Salustri, Ph.D., P.Eng.
Mechanical and Industrial Engineering
Ryerson University
350 Victoria St, Toronto, ON
M5B 2K3, Canada
Tel: 416/979-5000 ext 7749
Fax: 416/979-5265
Email: salustri@ryerson.ca
http://deseng.ryerson.ca/~fil/

[-- Attachment #2: Type: text/html, Size: 1035 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: manipulating the agenda from elisp?
  2011-04-08  2:05 manipulating the agenda from elisp? Filippo A. Salustri
@ 2011-04-08  3:34 ` Bernt Hansen
  2011-04-08  3:53   ` Filippo A. Salustri
  2011-04-08 16:59   ` Carsten Dominik
  2011-04-08 16:36 ` Bastien
  1 sibling, 2 replies; 8+ messages in thread
From: Bernt Hansen @ 2011-04-08  3:34 UTC (permalink / raw)
  To: Filippo A. Salustri; +Cc: emacs-orgmode

"Filippo A. Salustri" <salustri@ryerson.ca> 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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: manipulating the agenda from elisp?
  2011-04-08  3:34 ` Bernt Hansen
@ 2011-04-08  3:53   ` Filippo A. Salustri
  2011-04-08  5:00     ` Nick Dokos
  2011-04-08 16:59   ` Carsten Dominik
  1 sibling, 1 reply; 8+ messages in thread
From: Filippo A. Salustri @ 2011-04-08  3:53 UTC (permalink / raw)
  To: Bernt Hansen; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 2068 bytes --]

That's a good start!  Thanks!
Cheers.
Fil

On 7 April 2011 23:34, Bernt Hansen <bernt@norang.ca> wrote:

> "Filippo A. Salustri" <salustri@ryerson.ca> 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
>



-- 
Filippo A. Salustri, Ph.D., P.Eng.
Mechanical and Industrial Engineering
Ryerson University
350 Victoria St, Toronto, ON
M5B 2K3, Canada
Tel: 416/979-5000 ext 7749
Fax: 416/979-5265
Email: salustri@ryerson.ca
http://deseng.ryerson.ca/~fil/

[-- Attachment #2: Type: text/html, Size: 2843 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Re: manipulating the agenda from elisp?
  2011-04-08  3:53   ` Filippo A. Salustri
@ 2011-04-08  5:00     ` Nick Dokos
  2011-04-08 11:30       ` Filippo A. Salustri
  0 siblings, 1 reply; 8+ messages in thread
From: Nick Dokos @ 2011-04-08  5:00 UTC (permalink / raw)
  To: Filippo A. Salustri; +Cc: Bernt Hansen, nicholas.dokos, emacs-orgmode

Filippo A. Salustri <salustri@ryerson.ca> wrote:

> That's a good start!  Thanks!
> Cheers.
> Fil
> 
> On 7 April 2011 23:34, Bernt Hansen <bernt@norang.ca> wrote:
> 
>     "Filippo A. Salustri" <salustri@ryerson.ca> 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?
>    

Be sure to read the "Hacking" appendix in the org manual, in particular
"Using the property API" and "Using the mapping API".

Nick

>     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
> 
> --
> Filippo A. Salustri, Ph.D., P.Eng.
> Mechanical and Industrial Engineering
> Ryerson University
> 350 Victoria St, Toronto, ON
> M5B 2K3, Canada
> Tel: 416/979-5000 ext 7749
> Fax: 416/979-5265
> Email: salustri@ryerson.ca
> http://deseng.ryerson.ca/~fil/
> 
> 
> ----------------------------------------------------
> Alternatives:
> 
> ----------------------------------------------------

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Re: manipulating the agenda from elisp?
  2011-04-08  5:00     ` Nick Dokos
@ 2011-04-08 11:30       ` Filippo A. Salustri
  0 siblings, 0 replies; 8+ messages in thread
From: Filippo A. Salustri @ 2011-04-08 11:30 UTC (permalink / raw)
  To: nicholas.dokos; +Cc: Bernt Hansen, emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 3127 bytes --]

Yup; I'd noticed those sections and noted them for future study.
Thanks.
Cheers.
Fil

On 8 April 2011 01:00, Nick Dokos <nicholas.dokos@hp.com> wrote:

> Filippo A. Salustri <salustri@ryerson.ca> wrote:
>
> > That's a good start!  Thanks!
> > Cheers.
> > Fil
> >
> > On 7 April 2011 23:34, Bernt Hansen <bernt@norang.ca> wrote:
> >
> >     "Filippo A. Salustri" <salustri@ryerson.ca> 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?
> >
>
> Be sure to read the "Hacking" appendix in the org manual, in particular
> "Using the property API" and "Using the mapping API".
>
> Nick
>
> >     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
> >
> > --
> > Filippo A. Salustri, Ph.D., P.Eng.
> > Mechanical and Industrial Engineering
> > Ryerson University
> > 350 Victoria St, Toronto, ON
> > M5B 2K3, Canada
> > Tel: 416/979-5000 ext 7749
> > Fax: 416/979-5265
> > Email: salustri@ryerson.ca
> > http://deseng.ryerson.ca/~fil/
> >
> >
> > ----------------------------------------------------
> > Alternatives:
> >
> > ----------------------------------------------------
>



-- 
Filippo A. Salustri, Ph.D., P.Eng.
Mechanical and Industrial Engineering
Ryerson University
350 Victoria St, Toronto, ON
M5B 2K3, Canada
Tel: 416/979-5000 ext 7749
Fax: 416/979-5265
Email: salustri@ryerson.ca
http://deseng.ryerson.ca/~fil/

[-- Attachment #2: Type: text/html, Size: 4438 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: manipulating the agenda from elisp?
  2011-04-08  2:05 manipulating the agenda from elisp? Filippo A. Salustri
  2011-04-08  3:34 ` Bernt Hansen
@ 2011-04-08 16:36 ` Bastien
  1 sibling, 0 replies; 8+ messages in thread
From: Bastien @ 2011-04-08 16:36 UTC (permalink / raw)
  To: Filippo A. Salustri; +Cc: emacs-orgmode

Hi Filippo,

"Filippo A. Salustri" <salustri@ryerson.ca> writes:

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

In an agenda, try `C-u C-x =' to see all the text properties at point.
You can grab a lot of information from these properties.

HTH,

-- 
 Bastien

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Re: manipulating the agenda from elisp?
  2011-04-08  3:34 ` Bernt Hansen
  2011-04-08  3:53   ` Filippo A. Salustri
@ 2011-04-08 16:59   ` Carsten Dominik
  2011-04-08 17:00     ` Filippo A. Salustri
  1 sibling, 1 reply; 8+ messages in thread
From: Carsten Dominik @ 2011-04-08 16:59 UTC (permalink / raw)
  To: Bernt Hansen; +Cc: Filippo A. Salustri, emacs-orgmode


On 8.4.2011, at 05:34, Bernt Hansen wrote:

> "Filippo A. Salustri" <salustri@ryerson.ca> 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---

Also useful can be

      (org-entry-properties marker)

Kind of slow for *many* entries, but perfectly good for a limited number...

- Carsten

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Re: manipulating the agenda from elisp?
  2011-04-08 16:59   ` Carsten Dominik
@ 2011-04-08 17:00     ` Filippo A. Salustri
  0 siblings, 0 replies; 8+ messages in thread
From: Filippo A. Salustri @ 2011-04-08 17:00 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: Bernt Hansen, emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 2202 bytes --]

Thanks to everyone for the hints and tips.  It's much appreciated.
Cheers.
Fil

On 8 April 2011 12:59, Carsten Dominik <carsten.dominik@gmail.com> wrote:

>
> On 8.4.2011, at 05:34, Bernt Hansen wrote:
>
> > "Filippo A. Salustri" <salustri@ryerson.ca> 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---
>
> Also useful can be
>
>       (org-entry-properties marker)
>
> Kind of slow for *many* entries, but perfectly good for a limited number...
>
> - Carsten
>
>


-- 
Filippo A. Salustri, Ph.D., P.Eng.
Mechanical and Industrial Engineering
Ryerson University
350 Victoria St, Toronto, ON
M5B 2K3, Canada
Tel: 416/979-5000 ext 7749
Fax: 416/979-5265
Email: salustri@ryerson.ca
http://deseng.ryerson.ca/~fil/

[-- Attachment #2: Type: text/html, Size: 3132 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2011-04-08 17:09 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-04-08  2:05 manipulating the agenda from elisp? Filippo A. Salustri
2011-04-08  3:34 ` Bernt Hansen
2011-04-08  3:53   ` Filippo A. Salustri
2011-04-08  5:00     ` Nick Dokos
2011-04-08 11:30       ` Filippo A. Salustri
2011-04-08 16:59   ` Carsten Dominik
2011-04-08 17:00     ` Filippo A. Salustri
2011-04-08 16:36 ` Bastien

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