branch: externals/denote commit ed21e8b64774d704ea2c84b977659cc4269636f4 Author: Ad <m...@skissue.xyz> Commit: Ad <m...@skissue.xyz>
Support functions in `denote-templates` --- denote.el | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/denote.el b/denote.el index 5d6a1b8097..b345f51309 100644 --- a/denote.el +++ b/denote.el @@ -499,21 +499,22 @@ it, use the command `org-insert-link'. Note that `org-capture' uses A template is arbitrary text that Denote will add to a newly created note right below the front matter. -Templates are expressed as a (KEY . STRING) association. +Templates are expressed as a (KEY . VALUE) association. - The KEY is the name which identifies the template. It is an arbitrary symbol, such as `report', `memo', `statement'. -- The STRING is ordinary text that Denote will insert as-is. It - can contain newline characters to add spacing. The manual of - Denote contains examples on how to use the `concat' function, - beside writing a generic string. +- The VALUE is ordinary text that Denote will insert as-is. It can + contain newline characters to add spacing. The manual of Denote + contains examples on how to use the `concat' function, beside writing + a generic string. It can also be a function of no arguments that + returns a string that Denote will call and insert the result from. The user can choose a template either by invoking the command `denote-template' or by changing the user option `denote-prompts' to always prompt for a template when calling the `denote' command." - :type '(alist :key-type symbol :value-type string) + :type '(alist :key-type symbol :value-type (choice string function)) :package-version '(denote . "0.5.0") :link '(info-link "(denote) The denote-templates option") :group 'denote) @@ -1951,7 +1952,10 @@ TEMPLATE, and SIGNATURE should be valid for note creation." (user-error "A file named `%s' already exists" path)) (with-current-buffer buffer (insert header) - (insert template)) + (insert (cond + ((stringp template) template) + ((functionp template) (funcall template)) + (t (user-error "Invalid template"))))) path)) (defun denote--dir-in-denote-directory-p (directory) @@ -2263,7 +2267,7 @@ instead of that of the parameter." (directory (if (denote--dir-in-denote-directory-p directory) (file-name-as-directory directory) (denote-directory))) - (template (if (stringp template) + (template (if (or (stringp template) (functionp template)) template (or (alist-get template denote-templates) ""))) (signature (or signature "")))