We’ve talked about how to configure org-capture and the types of captures we can create. On that second topic, we showed the default templates for each type of note. On this article, we’ll focus on templates.

To lay out a definition, a template is the chunk of text that will be inserted by default into our note.

They work as I’ve shown on the first part of this series, by adding a string as the fourth parameter for a note type:

(setq org-capture-templates
      '(
        ("i" "Post idea"           entry (file "~/Dropbox/wordpress_rake/IDEAS.org")
         "* %?\n")           ; <--
        ("w" "Woodworking project" entry (file "~/Dropbox/org-files/woodworking_projects.org")
         "* TODO %?\n")      ; <--
        ))

But, as you can see on the example, there’s more to it than just a plain string. org-capture templates allow template expansion codes.

Expansion codes

I won’t explain each expansion with my own words, because they’re very well explained on the =org-capture= documentation. But I’ll copy them here so we can have them at hand.

%[file] Insert the contents of the file given by file.
%(sexp) Evaluate Elisp sexp and replace with the result. The sexp must return a string.
%<…> The result of format-time-string on the … format specification.
%t Timestamp, date only.
%T Timestamp, with date and time.
%u, %U Like the above, but inactive timestamps.
%i Initial content, the region when capture is called while the
region is active.
The entire text will be indented like %i itself.
%a Annotation, normally the link created with org-store-link.
%A Like %a, but prompt for the description part.
%l Like %a, but only insert the literal link.
%c Current kill ring head.
%x Content of the X clipboard.
%k Title of the currently clocked task.
%K Link to the currently clocked task.
%n User name (taken from user-full-name).
%f File visited by current buffer when org-capture was called.
%F Full path of the file or directory visited by current buffer.
%:keyword Specific information for certain link types, see below.
%^g Prompt for tags, with completion on tags in target file.
%^G Prompt for tags, with completion all tags in all agenda files.
%^t Like %t, but prompt for date. Similarly %^T, %^u, %^U.
You may define a prompt like %Birthdayt.
%^C Interactive selection of which kill or clip to use.
%^L Like %^C, but insert as link.
%propp Prompt the user for a value for property prop.
%prompt prompt the user for a string and replace this sequence with it.
%\1 … %\N Insert the text entered at the Nth %prompt, where N is a number, starting from 1.
%? After completing the template, position cursor here.


Note:

prompt
For the prompt keyword you may specify a default value and a completion table with %prompt|default|completion2|completion3…. The arrow keys access a prompt-specific history.