Skip Collins <skip.coll...@gmail.com> writes: > Recently, I get an error message when invoking custom capture > templates like this one: > ("n" "Note" entry > (file "~/Documents/org/beorg/capture.org") > "* %^{note} :note: %(org-set-property \"Created\" > (org-time-stamp-inactive '(16)))" :immediate-finish t) > > ... > But the pre-populated *Capture* window contains an error message: > * :note: %![Error: (error Calling ‘org-fold-core-region’ with missing SPEC)] > :PROPERTIES:...
Thanks for the report! This is quite a hacky capture template... What you are seeing happens because template expansion happens in fundamental-mode and org-set-property does not work anymore outside org-mode. I'd say that setting org-mode during template expansion is reasonable. The fix is attached. I do not push the fix just yet. If anyone think that enabling org-mode during template expansion is undesired, please let me know. Best, Ihor
>From 797dfd0c82c68696d8534a9b3103d0b3c622bee6 Mon Sep 17 00:00:00 2001 Message-Id: <797dfd0c82c68696d8534a9b3103d0b3c622bee6.1651450441.git.yanta...@gmail.com> From: Ihor Radchenko <yanta...@gmail.com> Date: Mon, 2 May 2022 08:11:28 +0800 Subject: [PATCH] org-capture: Expand sexps in template with Org mode being active * lisp/org-capture.el (org-capture-fill-template): Enable `org-mode' in the temporary template expansion buffer. Update docstring accordingly. (org-capture-templates): Clarify that %(sexp) expansion happens in a temporary Org mode buffer. Fixes https://orgmode.org/list/CABUh-776V-_+_JAZwcKQm9ATcs0WUV9SmGwjooGFbt=ctwq...@mail.gmail.com --- lisp/org-capture.el | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/org-capture.el b/lisp/org-capture.el index 068e3eda2..9b17fa978 100644 --- a/lisp/org-capture.el +++ b/lisp/org-capture.el @@ -309,6 +309,8 @@ (defcustom org-capture-templates nil introduced with %[pathname] are expanded this way. Since this happens after expanding non-interactive %-escapes, those can be used to fill the expression. + The evaluation happens with Org mode set as major mode + in a temporary buffer. %<...> The result of `format-time-string' on the ... format specification. %t Time stamp, date only. The time stamp is the current @@ -1572,7 +1574,9 @@ (defun org-capture-fill-template (&optional template initial annotation) "Fill a TEMPLATE and return the filled template as a string. The template may still contain \"%?\" for cursor positioning. INITIAL content and/or ANNOTATION may be specified, but will be overridden -by their respective `org-store-link-plist' properties if present." +by their respective `org-store-link-plist' properties if present. + +Expansion occurs in a temporary Org mode buffer." (let* ((template (or template (org-capture-get :template))) (buffer (org-capture-get :buffer)) (file (buffer-file-name (or (buffer-base-buffer buffer) buffer))) @@ -1645,6 +1649,7 @@ (defun org-capture-fill-template (&optional template initial annotation) (setq buffer-file-name nil) (setq mark-active nil) (insert template) + (org-mode) (goto-char (point-min)) ;; %[] insert contents of a file. (save-excursion -- 2.35.1