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