É possível arquivar um modelo de captura em uma subposição de dia em uma árvore de dados?

8

No modo Org, gostaria de ter um modelo de captura armazenado assim:

* 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

Isso é possível imediatamente? Se não, alguma idéia de como implementá-lo?

Max Hollmann
fonte
Não estou totalmente claro sobre o que você deseja alcançar. Por que existe um "problema" na linha que diz **** Todo today? Seria ótimo se você pudesse estender sua postagem para incluir (1) um exemplo da saída que o modelo de captura produz atualmente, (2) um exemplo separado da saída que você gostaria de ver e (3) o próprio modelo de captura . Fora isso, seja bem-vindo ao Emacs.SE!
Itsjeyd 21/05
Não sei como obter essa linha entre o título do datetree ( 2015-05-21 Thursday) e o título produzido pelo modelo ( TODO something). Basicamente, o que eu preciso é file+datetree+olp.
Max Hollmann
Caso você tenha visto a resposta que eu postei anteriormente: Ele não abordou completamente o seu caso de uso, no sentido em que inseriu um **** Todo todaycabeçalho para cada TODOitem criado usando org-capture. Eu já corrigi esse problema; por favor, dê uma outra olhada na minha resposta.
Itsjeyd

Respostas:

11

Você pode conseguir o que deseja definindo uma função personalizada que retorna o local de destino para a expansão do modelo:

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

Em seguida, configure seu modelo da seguinte maneira:

(setq org-capture-templates
      '(("t" "Test" plain (file+function "~/org/test.org"
                                         org-find-heading-in-datetree)
         "***** TODO %?")))
itsjeyd
fonte
1
calendar-current-dateé gregoriano desde o início, portanto não há necessidade de converter org-todaypara gregoriano.
lawlist
@lawlist Obrigado por apontar isso! Eu atualizei minha resposta.
Itsjeyd 21/05
1
Isso quase funcionou para mim. O problema era que ele adicionaria o "***** Todo hoje", mas o "***** TODO" ficaria fora da árvore de dados. Foi capaz de corrigir esse comportamento, alterando (Goto-char (ponto-max)) para (Goto-char (ponto-a-EOL))
rking