Re: [O] Define capture template with dynamic id target

2011-06-11 Thread Aankhen
Hi Darlan,

On Fri, Jun 10, 2011 at 21:20, Darlan Cavalcante Moreira
darc...@gmail.com wrote:
 Thanks David,

 I tried to follow your suggestion, but I found two problems (maybe because
 I know little about lisp).

 For instance, suppose I have a test.org file with the follow content
 --8---cut here---start-8---
 * 2011
  Every headline has an ID, but I have omitted here for brevity
 *** May
 * Sub-headline
      bla bla bla
 *** June
 * Sub-headline
      bla bla bla
 --8---cut here---end---8---

 I want the capture process to add an entry to the Sub-headline of June. If
 I just use the file+headline and specify Sub-headline then it will add to
 the Sub-headline in May. That's why I tried using IDs in the first
 place. Also, every month I create a new month headline with the
 Sub-headline and the capture process should add an entry to that
 instead. That is the reason I wanted to get the ID from a function, instead
 of just writing it in the capture template.


 As far as I understand if I use the file+function target then the function
 must return the headline name, but how can I say that I want the
 Sub-headline of June and not of May? [first problem]

 I found an org-id-find function that returns something like
 (filename . characterPosition). Therefore, If there is a way to specify a
 position where org should start looking for the headline then I could use
 that to go to the correct Sub-headline.


 Also, the file+headline target will add the entry as a child of the
 specified headline, but file+function seems to add the entry as a sibling
 of the headline returned by the function. [second problem] Is this intended
 behaviour or is it a bug?
 [snip]

Looking at the code, the function doesn’t need to return anything; it
just needs to place point where you want the new headline to appear.
Therefore, you can use ‘org-find-olp’ to locate the entry:

,[ C-h f org-find-olp RET ]
| org-find-olp is a compiled Lisp function in `org.el'.
|
| (org-find-olp PATH optional THIS-BUFFER)
|
| Return a marker pointing to the entry at outline path OLP.
| If anything goes wrong, throw an error.
| You can wrap this call to catch the error like this:
|
|   (condition-case msg
|   (org-mobile-locate-entry (match-string 4))
| (error (nth 1 msg)))
|
| The return value will then be either a string with the error message,
| or a marker if everything is OK.
|
| If THIS-BUFFER is set, the outline path does not contain a file,
| only headings.
`

So the code would look something like this:

,
| (org-find-olp '(2011 May Sub-headline) t)
`

Aankhen



Re: [O] Define capture template with dynamic id target

2011-06-10 Thread Darlan Cavalcante Moreira

Thanks David,

I tried to follow your suggestion, but I found two problems (maybe because
I know little about lisp).

For instance, suppose I have a test.org file with the follow content
--8---cut here---start-8---
* 2011
  Every headline has an ID, but I have omitted here for brevity
*** May
* Sub-headline
  bla bla bla
*** June
* Sub-headline
  bla bla bla
--8---cut here---end---8---

I want the capture process to add an entry to the Sub-headline of June. If
I just use the file+headline and specify Sub-headline then it will add to
the Sub-headline in May. That's why I tried using IDs in the first
place. Also, every month I create a new month headline with the
Sub-headline and the capture process should add an entry to that
instead. That is the reason I wanted to get the ID from a function, instead
of just writing it in the capture template.


As far as I understand if I use the file+function target then the function
must return the headline name, but how can I say that I want the
Sub-headline of June and not of May? [first problem]

I found an org-id-find function that returns something like
(filename . characterPosition). Therefore, If there is a way to specify a
position where org should start looking for the headline then I could use
that to go to the correct Sub-headline.


Also, the file+headline target will add the entry as a child of the
specified headline, but file+function seems to add the entry as a sibling
of the headline returned by the function. [second problem] Is this intended
behaviour or is it a bug?

--
Thanks again,
Darlan


At Fri, 10 Jun 2011 07:31:43 +0200,
David Maus dm...@ictsoc.de wrote:
 
 [1  text/plain; US-ASCII (7bit)]
 At Thu, 09 Jun 2011 15:18:00 -0300,
 Darlan Cavalcante Moreira wrote:
 
 
  Hello List,
 
  I'm trying to create a few templates for org capture and I have found a
  weird behavior with the ID target type. It works OK if I use the ID
  directly like below
  #+begin_src emacs-lisp
(id Junho2011Contas)
  #+end_src
  but it does not find the ID if I try to get it from a function, such as
  #+begin_src emacs-lisp
(id (get-me-an-org-id-for-the-month Contas))
  #+end_src
 
 Org capture does not support executing a function in the ID target spec.
 
 C-h v org-capture-templates RET
 
 target   Specification of where the captured item should be placed.
  In Org-mode files, targets usually define a node.  Entries will
  become children of this node, other types will be added to the
  table or list in the body of this node.
 
  Most target specifications contain a file name.  If that file
  name is the empty string, it defaults to 
 `org-default-notes-file'.
  A file can also be given as a variable, function, or Emacs Lisp
  form.
 
  Valid values are:
 
  (file path/to/file)
  Text will be placed at the beginning or end of that file
 
  (id id of existing org entry)
  File as child of this entry, or in the body of the entry
 
  ...
 
 You might use the `function' target spec
 
  (function function-finding-location)
 Most general way, write your own function to find both
 file and location
 
 HTH,
   -- David
 --
 OpenPGP... 0x99ADB83B5A4478E6
 Jabber dmj...@jabber.org
 Email. dm...@ictsoc.de
 [2  application/pgp-signature (7bit)]
 



[O] Define capture template with dynamic id target

2011-06-09 Thread Darlan Cavalcante Moreira

Hello List,

I'm trying to create a few templates for org capture and I have found a
weird behavior with the ID target type. It works OK if I use the ID
directly like below
#+begin_src emacs-lisp
  (id Junho2011Contas)
#+end_src
but it does not find the ID if I try to get it from a function, such as
#+begin_src emacs-lisp
  (id (get-me-an-org-id-for-the-month Contas))
#+end_src

All the get-me-an-org-id-for-the-month function does is returning
MonthnameYearArgument, in this case it returns Junho2011Contas. The
definition is given below
#+begin_src emacs-lisp
  (defun get-me-an-org-id-for-the-month (categoryName)
Used only in my template for the expenses of the month. It
  return a suitable ID for the month sub-headline.
(interactive)
(concat (get-current-month) (get-current-year) categoryName)
)
#+end_src


--
Darlan



Re: [O] Define capture template with dynamic id target

2011-06-09 Thread David Maus
At Thu, 09 Jun 2011 15:18:00 -0300,
Darlan Cavalcante Moreira wrote:


 Hello List,

 I'm trying to create a few templates for org capture and I have found a
 weird behavior with the ID target type. It works OK if I use the ID
 directly like below
 #+begin_src emacs-lisp
   (id Junho2011Contas)
 #+end_src
 but it does not find the ID if I try to get it from a function, such as
 #+begin_src emacs-lisp
   (id (get-me-an-org-id-for-the-month Contas))
 #+end_src

Org capture does not support executing a function in the ID target spec.

C-h v org-capture-templates RET

target   Specification of where the captured item should be placed.
 In Org-mode files, targets usually define a node.  Entries will
 become children of this node, other types will be added to the
 table or list in the body of this node.

 Most target specifications contain a file name.  If that file
 name is the empty string, it defaults to `org-default-notes-file'.
 A file can also be given as a variable, function, or Emacs Lisp
 form.

 Valid values are:

 (file path/to/file)
 Text will be placed at the beginning or end of that file

 (id id of existing org entry)
 File as child of this entry, or in the body of the entry

 ...

You might use the `function' target spec

 (function function-finding-location)
Most general way, write your own function to find both
file and location

HTH,
  -- David
--
OpenPGP... 0x99ADB83B5A4478E6
Jabber dmj...@jabber.org
Email. dm...@ictsoc.de


pgpYcbpVXoTDw.pgp
Description: PGP signature