Apakah mungkin untuk mengarsipkan templat pengambilan dalam subpos sehari dalam suatu datetree?

8

Dalam mode-Org, saya ingin agar templat tangkapan disimpan seperti ini:

* 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

Apakah itu mungkin di luar kotak? Jika tidak, ada ide bagaimana menerapkannya?

Max Hollmann
sumber
Saya tidak sepenuhnya jelas tentang apa yang ingin Anda capai. Mengapa ada "masalah" di baris yang mengatakan **** Todo today? Akan lebih bagus jika Anda dapat memperluas posting Anda untuk memasukkan (1) contoh dari output yang dihasilkan template capture Anda, (2) contoh terpisah dari output yang ingin Anda lihat, dan (3) template capture itu sendiri . Selain itu, selamat datang di Emacs.SE!
itsjeyd
Saya tidak tahu bagaimana mendapatkan garis antara headline datetree ( 2015-05-21 Thursday) dan headline yang dihasilkan oleh template ( TODO something). Pada dasarnya, yang saya butuhkan adalah file+datetree+olp.
Max Hollmann
Jika Anda melihat jawaban yang saya posting sebelumnya: Itu tidak sepenuhnya mengatasi kasus penggunaan Anda dalam arti bahwa itu memasukkan **** Todo todayjudul untuk setiap TODOitem yang dibuat menggunakan org-capture. Saya telah memperbaiki masalah ini; tolong lihat lagi jawaban saya.
itsjeyd

Jawaban:

11

Anda dapat mencapai apa yang Anda inginkan dengan mendefinisikan fungsi khusus yang mengembalikan lokasi target untuk perluasan template:

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

Kemudian atur templat Anda seperti ini:

(setq org-capture-templates
      '(("t" "Test" plain (file+function "~/org/test.org"
                                         org-find-heading-in-datetree)
         "***** TODO %?")))
itu hanya
sumber
1
calendar-current-dateadalah Gregorian pada awalnya, jadi tidak perlu mengkonversi dari org-todayke Gregorian.
hukum
@lawlist Terima kasih telah menunjukkannya! Saya memperbarui jawaban saya.
itsjeyd
1
Ini hampir berhasil untuk saya. Masalahnya adalah itu akan menambahkan "***** Todo hari ini" tetapi kemudian "***** TODO" akan berada di luar datetree. Mampu memperbaiki perilaku ini dengan mengubah (goto-char (point-max)) menjadi (goto-char (point-at-eol))
rking