Allow %<num> escapes to capture templates, expanded to text entered in <num>'th prompt

* org-capture.el (org-capture-fill-template): Expand %<num>
escape sequences into text entered for <num>'th %^{PROMPT} escape.
This commit is contained in:
Toby Cubitt 2012-04-23 03:47:59 +00:00 committed by Bastien Guerry
parent 1c203d8d19
commit e13d182ce8
2 changed files with 39 additions and 24 deletions

View File

@ -6670,28 +6670,28 @@ these sequences literally, escape the @kbd{%} with a backslash.} allow
dynamic insertion of content. The templates are expanded in the order given here:
@smallexample
%[@var{file}] @r{insert the contents of the file given by @var{file}.}
%(@var{sexp}) @r{evaluate Elisp @var{sexp} and replace with the result.}
%<...> @r{the result of format-time-string on the ... format specification.}
%t @r{timestamp, date only.}
%T @r{timestamp with date and time.}
%u, %U @r{like the above, but inactive timestamps.}
%a @r{annotation, normally the link created with @code{org-store-link}.}
%i @r{initial content, the region when capture is called while the}
%[@var{file}] @r{Insert the contents of the file given by @var{file}.}
%(@var{sexp}) @r{Evaluate Elisp @var{sexp} and replace with the result.}
%<...> @r{The result of format-time-string on the ... format specification.}
%t @r{Timestamp, date only.}
%T @r{Timestamp, with date and time.}
%u, %U @r{Like the above, but inactive timestamps.}
%a @r{Annotation, normally the link created with @code{org-store-link}.}
%i @r{Initial content, the region when capture is called while the}
@r{region is active.}
@r{The entire text will be indented like @code{%i} itself.}
%A @r{like @code{%a}, but prompt for the description part.}
%A @r{Like @code{%a}, but prompt for the description part.}
%c @r{Current kill ring head.}
%x @r{Content of the X clipboard.}
%k @r{title of the currently clocked task.}
%K @r{link to the currently clocked task.}
%n @r{user name (taken from @code{user-full-name}).}
%f @r{file visited by current buffer when org-capture was called.}
%F @r{full path of the file or directory visited by current buffer.}
%:keyword @r{specific information for certain link types, see below.}
%^g @r{prompt for tags, with completion on tags in target file.}
%^G @r{prompt for tags, with completion all tags in all agenda files.}
%^t @r{like @code{%t}, but prompt for date. Similarly @code{%^T}, @code{%^u}, @code{%^U}.}
%k @r{Title of the currently clocked task.}
%K @r{Link to the currently clocked task.}
%n @r{User name (taken from @code{user-full-name}).}
%f @r{File visited by current buffer when org-capture was called.}
%F @r{Full path of the file or directory visited by current buffer.}
%:keyword @r{Specific information for certain link types, see below.}
%^g @r{Prompt for tags, with completion on tags in target file.}
%^G @r{Prompt for tags, with completion all tags in all agenda files.}
%^t @r{Like @code{%t}, but prompt for date. Similarly @code{%^T}, @code{%^u}, @code{%^U}.}
@r{You may define a prompt like @code{%^@{Birthday@}t}.}
%^C @r{Interactive selection of which kill or clip to use.}
%^L @r{Like @code{%^C}, but insert as link.}
@ -6700,6 +6700,9 @@ dynamic insertion of content. The templates are expanded in the order given her
@r{You may specify a default value and a completion table with}
@r{%^@{prompt|default|completion2|completion3...@}.}
@r{The arrow keys access a prompt-specific history.}
%<n> @r{Insert the text entered for at the nth %^{prompt}, where <n>
@r{represents a digit, 1 to 9.}
%? @r{After completing the template, position cursor here.}
@end smallexample
@noindent

View File

@ -248,6 +248,8 @@ be replaced with content and expanded in this order:
A default value and a completion table ca be specified like this:
%^{prompt|default|completion2|completion3|...}.
%? After completing the template, position cursor here.
%<n> Insert the text entered for at the nth %^{prompt}, where <n>
represents a digit, 1 to 9.
Apart from these general escapes, you can access information specific to the
link type that is created. For example, calling `org-capture' in emails
@ -1326,7 +1328,7 @@ The template may still contain \"%?\" for cursor positioning."
(org-startup-folded nil)
(org-inhibit-startup t)
org-time-was-given org-end-time-was-given x
prompt completions char time pos default histvar)
prompt completions char time pos default histvar strings)
(setq org-store-link-plist
(plist-put org-store-link-plist :annotation v-a)
@ -1468,11 +1470,21 @@ The template may still contain \"%?\" for cursor positioning."
nil nil (list org-end-time-was-given)))
(t
(let (org-completion-use-ido)
(insert (org-completing-read-no-i
(concat (if prompt prompt "Enter string")
(if default (concat " [" default "]"))
": ")
completions nil nil nil histvar default)))))))
(push (org-completing-read-no-i
(concat (if prompt prompt "Enter string")
(if default (concat " [" default "]"))
": ")
completions nil nil nil histvar default)
strings)
(insert (car strings)))))))
;; Replace %n escapes with nth %^{...} string
(setq strings (nreverse strings))
(goto-char (point-min))
(while (re-search-forward "%\\([1-9]\\)+" nil t)
(unless (org-capture-escaped-%)
(replace-match
(nth (1- (string-to-number (match-string 1))) strings)
nil t)))
;; Make sure there are no empty lines before the text, and that
;; it ends with a newline character
(goto-char (point-min))