Est-il possible de déposer un modèle de capture dans une sous-rubrique d'une journée dans un arbre de données?

8

En mode Org, j'aimerais qu'un modèle de capture soit stocké comme ceci:

* 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

Est-ce possible hors de la boîte? Sinon, avez-vous des idées sur la façon de le mettre en œuvre?

Max Hollmann
la source
Je ne suis pas tout à fait clair sur ce que vous voulez réaliser. Pourquoi y a-t-il un "problème" dans la ligne qui dit **** Todo today? Ce serait formidable si vous pouviez étendre votre publication pour inclure (1) un exemple de la sortie que votre modèle de capture produit actuellement, (2) un exemple distinct de la sortie que vous aimeriez voir, et (3) le modèle de capture lui-même . Sinon, bienvenue sur Emacs.SE!
itsjeyd
Je ne sais pas comment obtenir cette ligne entre le titre datetree ( 2015-05-21 Thursday) et le titre produit par le template ( TODO something). Fondamentalement, ce dont j'ai besoin est file+datetree+olp.
Max Hollmann
Au cas où vous auriez vu la réponse que j'ai postée plus tôt: elle ne répondait pas entièrement à votre cas d'utilisation dans le sens où elle insérait un en- **** Todo todaytête pour chaque TODOélément créé à l'aide org-capture. J'ai depuis résolu ce problème; veuillez revoir ma réponse.
itsjeyd

Réponses:

11

Vous pouvez obtenir ce que vous voulez en définissant une fonction personnalisée qui renvoie l'emplacement cible pour l'expansion du modèle:

(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)))

Ensuite, configurez votre modèle comme ceci:

(setq org-capture-templates
      '(("t" "Test" plain (file+function "~/org/test.org"
                                         org-find-heading-in-datetree)
         "***** TODO %?")))
itsjeyd
la source
1
calendar-current-dateest grégorien au départ, donc pas besoin de convertir de org-todaygrégorien.
lawlist
@lawlist Merci de l'avoir signalé! J'ai mis à jour ma réponse.
itsjeyd
1
Cela a presque fonctionné pour moi. Le problème était qu'il ajouterait le "***** Todo today" mais ensuite le "***** TODO" serait en dehors de l'arbre de données. A pu résoudre ce problème en changeant (goto-char (point-max)) en (goto-char (point-at-eol))
rking