emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] Re: question about capture templates


From: Carsten Dominik
Subject: Re: [Orgmode] Re: question about capture templates
Date: Tue, 22 Feb 2011 10:19:35 +0100

On Feb 22, 2011, at 5:59 AM, Richard Lawrence wrote:

> "Filippo A. Salustri" <address@hidden> writes:
> 
>> org-capture clearly has the original buffer handy (for %a
>> stuff) yet I can't get it out of there without hacking the org code, which I
>> am loathe to do.
> 
> I too was in a situation just today where I was calling org-capture
> programatically, and needed access to stuff in the calling environment.
> My solution (which may not be very good, and may not work for you) is to
> dynamically scope the calling environment stuff that I need into the
> org-capture call, like so:
> 
> #+begin_src emacs-lisp
> ; in the calling code, I scope some val I need into `foo...'
> (let ((foo some-val-I-need))
>  (org-capture nil "tm"))
> #+end_src
> 
> Then, in the template identified by "tm", I have S-expression expansion
> that operates on foo, even though it wasn't explicitly passed as a
> parameter, e.g.:
> 
> * My capture template
>  The car of foo is %(car foo).
>  The cdr of foo is %(cdr foo).
>  %a
>  etc. ...
> 
> This works well enough for me, though it may feel kind of icky, since
> from the template writer's perspective, `foo' looks like a global
> variable whose value could be coming from anywhere.

I do love dynamic scoping, this give a lot of power in Emacs.
Org-mode internals use that power often.

> Accordingly, then,
> this solution is mostly useful if you know that you're going to be using
> the template via custom Elisp calls to org-capture, and not via the
> usual capture interface, so that you can guarantee that `foo' has a
> useful value when the template is expanded.
> 
> One gotcha: S-expressions in templates are apparently always evaluated
> as function calls -- you can't just directly access a string value, like
> %(foo).

I guess you mean a variable value?

The shortest form may be %(symbol-value foo) if you want to access the
value of a variable in a template.

Kind regards

- Carsten


reply via email to

[Prev in Thread] Current Thread [Next in Thread]