From mboxrd@z Thu Jan 1 00:00:00 1970 From: Myles English Subject: Re: Capture template for datetree under existing headline Date: Sun, 25 Sep 2016 15:32:58 +0100 Message-ID: <87mviwyrqd.fsf@gmail.com> References: Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:59385) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1boAVP-0004Yk-1f for emacs-orgmode@gnu.org; Sun, 25 Sep 2016 10:34:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1boAVK-0004tS-KF for emacs-orgmode@gnu.org; Sun, 25 Sep 2016 10:34:09 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:34165) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1boAVK-0004t7-Cn for emacs-orgmode@gnu.org; Sun, 25 Sep 2016 10:34:06 -0400 Received: by mail-wm0-f67.google.com with SMTP id l132so10183140wmf.1 for ; Sun, 25 Sep 2016 07:34:06 -0700 (PDT) In-reply-to: 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" To: Peter Sterner Cc: emacs-orgmode@gnu.org Hi Peter, Peter Sterner writes: > I want to have a capture template that generates a datetree under an > existing headline in an org file with existing headlines. I tried this: > > ("j" "Journal" entry (file+datetree "~/workspace/org/notes.org" "Journal") > "* %?\n Added %U\n %i\n%a") > > I tried creating the Journal headline before capturing. But org-mode > generates a 2016 headline not placed under Journal. This seems to work, by making a new capture target called 'file+headline+datetree'. Capture template: ("j" "Journal" entry (file+headline+datetree "~/workspace/org/notes.org" "Journal") Patch: diff --git a/lisp/org-capture.el b/lisp/org-capture.el index a89d171..1826d3e 100644 --- a/lisp/org-capture.el +++ b/lisp/org-capture.el @@ -923,6 +923,40 @@ Store them in the capture property list." (setq target-entry-p (and (derived-mode-p 'org-mode) (org-at-heading-p)))) (error "No match for target regexp in file %s" (nth 1 target)))) + ((eq (car target) 'file+headline+datetree) + ;; copied from sexp for file+headline + (set-buffer (org-capture-target-buffer (nth 1 target))) + (org-capture-put-target-region-and-position) + (widen) + (let ((hd (nth 2 target))) + (goto-char (point-min)) + (unless (derived-mode-p 'org-mode) + (error + "Target buffer \"%s\" for file+headline+datetree should be in Org mode" + (current-buffer))) + (if (re-search-forward + (format org-complex-heading-regexp-format (regexp-quote hd)) + nil t) + (goto-char (point-at-bol)) + (goto-char (point-max)) + (or (bolp) (insert "\n")) + (insert "* " hd "\n") + (beginning-of-line 0))) + (org-narrow-to-subtree) + (org-show-subtree) + ;; copied from the sexp for file+datetree + (funcall + #'org-datetree-find-date-create + (calendar-gregorian-from-absolute + (cond + (org-overriding-default-time + ;; use the overriding default time + (time-to-days org-overriding-default-time)) + (t + ;; current date, possibly corrected for late night workers + (org-today)))) + 'restrict)) + ((memq (car target) '(file+datetree file+datetree+prompt file+weektree file+weektree+prompt)) (require 'org-datetree) (set-buffer (org-capture-target-buffer (nth 1 target))) This results in: * Journal * 2016 unless the following property is set: * Journal :PROPERTIES: :DATE_TREE: :END: ** 2016 An improvement might be to prompt for the headline to put the datetree under. It might have been possible to do this as a 'function' target. Myles