From mboxrd@z Thu Jan 1 00:00:00 1970 From: Toby Cubitt Subject: [PATCH] Allow % escapes to capture templates, expanded to text entered in 'th prompt Date: Mon, 23 Apr 2012 00:47:59 +0200 Message-ID: <20120422224759.GA11176@c3po.home> Reply-To: Toby Cubitt Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="n8g4imXOkfNTN/H1" Return-path: Received: from eggs.gnu.org ([208.118.235.92]:59984) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SM5a2-00073d-3M for emacs-orgmode@gnu.org; Sun, 22 Apr 2012 18:48:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SM5a0-0005Ac-9f for emacs-orgmode@gnu.org; Sun, 22 Apr 2012 18:48:29 -0400 Received: from sanddollar.geekisp.com ([216.168.135.167]:32118) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SM5a0-0005AV-4D for emacs-orgmode@gnu.org; Sun, 22 Apr 2012 18:48:28 -0400 Content-Disposition: inline List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org --n8g4imXOkfNTN/H1 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Currently, capture templates provide no way of prompting for some text, then inserting that text into multiple places in the template. This patch allow you to do this, by adding % escapes to the template syntax (where is a digit, 0 to 9), which expand to the text entered for the nth prompt in the template (as specified in the template using the usual %^{prompt} syntax). Useful for populating a subtree with an entire sequence of related TODOs, capturing a multi-step task. Toby -- Dr T. S. Cubitt Mathematics and Quantum Information group Department of Mathematics Complutense University Madrid, Spain email: tsc25@cantab.net web: www.dr-qubit.org --n8g4imXOkfNTN/H1 Content-Type: text/x-patch; charset=us-ascii Content-Disposition: attachment; filename="0001-Capture-Add-num-escapes-to-org-capture-templates.patch" >From 0e917539324fdc32cd0878b0819cb28b79f30f01 Mon Sep 17 00:00:00 2001 From: "Toby S. Cubitt" Date: Sat, 28 Jan 2012 17:04:05 +0100 Subject: [PATCH] Capture: Add % escapes to org capture templates * lisp/org-capture.el (org-capture-fill-template): Expand % escape sequences into text entered for 'th %^{PROMPT} escape. --- lisp/org-capture.el | 24 ++++++++++++++++++------ 1 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lisp/org-capture.el b/lisp/org-capture.el index f0afc70..2daca72 100644 --- a/lisp/org-capture.el +++ b/lisp/org-capture.el @@ -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. + % Insert the text entered for at the nth %^{prompt}, where + represents a digit, 0 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)) -- 1.7.8.5 --n8g4imXOkfNTN/H1--