Ist es möglich, eine Erfassungsvorlage in einer Unterüberschrift eines Tages in einem Datenbaum abzulegen?

8

Im Org-Modus möchte ich, dass eine Erfassungsvorlage wie folgt gespeichert wird:

* 2015
** 2015-05 May
*** 2015-05-21 Thursday     <--- I can get this with file+datetree
**** Todo today             <--- here's the problem
***** TODO something        <--- this is the captured content

Ist das sofort möglich? Wenn nicht, irgendwelche Ideen, wie man es umsetzt?

Max Hollmann
quelle
Mir ist nicht ganz klar, was Sie erreichen wollen. Warum gibt es ein "Problem" in der Zeile, das sagt **** Todo today? Es wäre großartig, wenn Sie Ihren Beitrag um (1) ein Beispiel für die Ausgabe erweitern könnten, die Ihre Erfassungsvorlage derzeit erzeugt, (2) ein separates Beispiel für die Ausgabe, die Sie sehen möchten, und (3) die Erfassungsvorlage selbst . Ansonsten herzlich willkommen bei Emacs.SE!
Itsjeyd
Ich weiß nicht, wie ich diese Zeile zwischen der Datenbaumüberschrift ( 2015-05-21 Thursday) und der von der Vorlage ( TODO something) erzeugten Überschrift erhalten soll . Grundsätzlich brauche ich file+datetree+olp.
Max Hollmann
Falls Sie die Antwort gesehen haben, die ich zuvor gepostet habe: Ihr Anwendungsfall wurde nicht vollständig **** Todo todayangesprochen, da für jedes mit TODOerstellte Element eine Überschrift eingefügt wurde org-capture. Ich habe dieses Problem inzwischen behoben. Bitte schauen Sie sich meine Antwort noch einmal an.
Itsjeyd

Antworten:

11

Sie können das erreichen, was Sie möchten, indem Sie eine benutzerdefinierte Funktion definieren, die den Zielspeicherort für die Vorlagenerweiterung zurückgibt:

(defun org-find-heading-in-datetree ()
  (org-datetree-find-date-create (calendar-current-date))
  (goto-char (point-at-eol))
  (when (not (re-search-forward
              (format org-complex-heading-regexp-format
                      (regexp-quote "Todo today")) nil t))
    (insert "\n**** Todo today\n"))
  (goto-char (point-max)))

Richten Sie dann Ihre Vorlage folgendermaßen ein:

(setq org-capture-templates
      '(("t" "Test" plain (file+function "~/org/test.org"
                                         org-find-heading-in-datetree)
         "***** TODO %?")))
itsjeyd
quelle
1
calendar-current-dateist zu Beginn Gregorianisch, daher muss nicht von org-todayGregorianisch konvertiert werden .
Lawlist
@lawlist Danke, dass du darauf hingewiesen hast! Ich habe meine Antwort aktualisiert.
Itsjeyd
1
Das hat bei mir fast geklappt. Das Problem war, dass es das "***** Todo today" hinzufügen würde, aber dann das "***** TODO" außerhalb des Datenbaums liegen würde. Konnte dieses Verhalten beheben, indem (goto-char (point-max)) in (goto-char (point-at-eol))
geändert wurde