At Thu, 24 Jan 2013 20:01:47 +0100, Bastien wrote: > > Hi Darlan, > > Darlan Cavalcante Moreira <darc...@gmail.com> writes: > > > everything works as expected and a table in the headline with ID > > "someIDstring" is used. However, if I try > > > > ("f" "The template description" table-line > > (id some_variable) > > "this is the template content" > > :table-line-pos "II-1" > > :immediate-finish t) > > Can you provide the full (setq org-capture-templates ...) > s-expression?
Hi Bastien, First I created an org-mode file with the following content to act as the target. --8<---------------cut here---------------start------------->8--- * Test table :PROPERTIES: :ID: MyTestID :END: | | Nome | Valor | |---+----------------+-------| | | something | 12.00 | | | something else | 23.45 | |---+----------------+-------| | # | Total | 35.45 | #+TBLFM: @4$3=vsum(@2..@-1);%.2f --8<---------------cut here---------------end--------------->8--- The capture template is something as simple as --8<---------------cut here---------------start------------->8--- (setq org-capture-templates '( ("f" "Add a new product and value") ("ff" "Table" table-line (id "MyTestID") "|| %^{Product} | %^{Value} |" :table-line-pos "II-1" :immediate-finish t))) --8<---------------cut here---------------end--------------->8--- This works as expected, but for my use case each month the target should be a different table (which I create with a different ID). Obviously manually changing the capture template each month is error prone and easy to forget. Therefore, tried to change the ID to a function providing the new target or a variable. For instance the code below. --8<---------------cut here---------------start------------->8--- (setq myIDVar "MyTestID") (setq org-capture-templates '( ("f" "Add a new product and value") ("ff" "Table" table-line (id myIDVar) "|| %^{Product} | %^{Value} |" :table-line-pos "II-1" :immediate-finish t))) --8<---------------cut here---------------end--------------->8--- When I try to capture with this second template Emacs complains that it cannot find the target ID "myIDVar". What I expected is that it would search for the ID "MyTestID" that is the value of myIDVar and not for an ID "myIDVar" I have also tried the code below and it does not work either --8<---------------cut here---------------start------------->8--- (defun some-function-return-the-id () "DOCSTRING" (interactive) "MyTestID") (setq org-capture-templates '( ("f" "Add a new product and value") ("ff" "Table" table-line (id (some-function-return-the-id)) "|| %^{Product} | %^{Value} |" :table-line-pos "II-1" :immediate-finish t))) --8<---------------cut here---------------end--------------->8--- > Did you tried this? > > (setq org-capture-templates > `(("f" "The template description" table-line > (id ,some_variable) > "this is the template content" > :table-line-pos "II-1" > :immediate-finish t))) > > > then it does not work even if some_variable or (some_function) provides the > > correct ID value. It seems that > > (id something) > > will always interpret "something" as a string (no matter if I put it inside > > quotes or not). > > Yes, it expects a string. > > > Is it possible to achieve what I want with the current org-capture > > implementation? > > See above. The problem being, of course, that the capture template > for "f" will use some_variable *statically* -- if the value of the > some_variable variable changed after you evaluated the s-expression > (setq org-capture-templates ...) then the new value will not be > known. > This is something I'll have to keep in mind. However, I don't expect this to be a problem since I start Emacs everyday. It is enough for me if I can set the ID to a variable (before setting org-capture-templates) and it uses the variable value as the ID, instead of trying to interpret the variable name as the ID. In fact, even if I ever need to change the variable value after org-capture-templates was set I'm fine by just reevaluating (setq org-capture-templates ...) again so that it sees the new value. > > If not, consider this as a feature request. > > What feature exactly? To allow a function here that would dynamically > set the id? > Exactly. Simple using the value of whatever list object I put there. Be it a variable value or a function that provides the. I'm fine if the value provided by a variable or a function is only read when org-capture-templates is set. > > The reason behind this is that each month I want a different target table > > for this capture template and I already implemented a function that returns > > the correct ID. If I can somehow make the ID target type use the return > > value of this function then this capture template will use the correct > > table each month. If not, I would be forced to manually change the capture > > template in the beginning of each month (something I will definitely > > forget). > > If you want to use a function ,some_variable will not work, check > ,@ constructs in the Elisp manual. > My lisp knowledge is very limited to what I have seen in my Emacs initialization (and a lot of trying and error). But I have never seen "@" used in lisp nor I know what terms to search for it.. Regards, Darlan > Thanks, > > -- > Bastien