[Top][All Lists]

[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

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]