Ihor Radchenko <yanta...@posteo.net> wrote: > […]
> %(...) 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 I'm using Emacs 28.3, so that is something for the future. But your pointer made me read the source and adjust my men- tal picture: I had always thought that capturing opened a window showing a narrowed section of the buffer, invoked org-capture-mode-hook, then inserted the template and went on from there. Instead (CMIIW), the template is evaluated in a temporary buffer, the result is pasted in the capture buffer, and then org-capture-mode-hook is invoked. That means inter alia that org-capture-mode-hook can work on the "completed" tem- plate. For my problem, I thus first (partly) replicated Org 9.6's behaviour by adding: | (lambda nil | (if | (version< org-version "9.6") | (let | ((hook | (org-capture-get :hook))) | (if | (functionp hook) | (funcall hook) | (mapc #'funcall hook))))) to org-capture-mode-hook. Then I thought about using org-table-map-tables to call org-table-recalculate on all tables in the capture buffer to avoid having to figure out where my table was. But org-table-map-tables unfortunately widens the buffer before iterating, so this was no option. Therefore, to keep it simple, I amended my template by add- ing "%?" to the cell where the sum is put in and setting the :hook property to org-table-recalculate. (I also added ";%.2f" to the formula for formatting.) In the end, this works very nicely. Thanks! Tim