emacs-orgmode
[Top][All Lists]
Advanced

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

Re: How to execute Lisp code /after/ a capture template has been filled


From: Ihor Radchenko
Subject: Re: How to execute Lisp code /after/ a capture template has been filled before it is finalized?
Date: Sat, 23 Dec 2023 18:11:20 +0000

Tim Landscheidt <tim@tim-landscheidt.de> writes:

> I (want to) have a capture template that fills a table and
> then (re-)calculates a cell based on a formula (and aligns
> the table):
> ...
> If I naively append "%(org-table-recalculate t)" to that
> template, the expression gets evaluated immediately when I
> start the capture and the text:
>
> | %![Error: (user-error Not at a table)]
>
> gets appended to the capture buffer /before/ I get prompted
> for the first field.
>
> Looking at the hooks for org-capture-mode, I also thought
> about recalculating the table at finalizing the capture (*1)
> and tried:

> | %(progn (message "org-capture-prepare-finalize-hook = %S" 
> org-capture-prepare-finalize-hook) (add-hook 
> 'org-capture-prepare-finalize-hook (lambda nil (message "Hook called.")) 0 t) 
> (message "org-capture-prepare-finalize-hook = %S" 
> org-capture-prepare-finalize-hook) "")

%(...) expansion is executed _before_ capture template is fully
 calculated. It is generally not designed to side-effect functions.

You can instead use template-local hooks, introduced in Org 9.6. See
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/tree/etc/ORG-NEWS#n1270

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>



reply via email to

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