73 lines
2.5 KiB
Org Mode
73 lines
2.5 KiB
Org Mode
:PROPERTIES:
|
|
:ID: cce/defdaily
|
|
:ROAM_ALIASES: "Generate Journal Captures"
|
|
:END:
|
|
#+TITLE: defdaily
|
|
#+filetags: :CCE:
|
|
#+ARCOLOGY_KEY: cce/defdaily
|
|
|
|
#+PROPERTY: header-args :mkdirp yes :results none
|
|
#+PROPERTY: header-args:emacs-lisp :tangle defdaily.el
|
|
#+PROPERTY: header-args:yaml :tangle roles/endpoint/tasks/defdaily.yml
|
|
|
|
#+ARROYO_EMACS_MODULE: defdaily
|
|
#+ARROYO_MODULE_WANTS: cce/org_mode_installation.org
|
|
#+ARROYO_MODULE_WANTED: cce/run_hooks_after_init.org
|
|
#+ARCOLOGY_ALLOW_CRAWL: t
|
|
|
|
Why shouldn't my [[id:cce/mood_log][Mood Log]] just write in to my [[id:Journal][Journal]] daily files? A macro would be nice.
|
|
|
|
#+begin_src emacs-lisp
|
|
(defvar defdaily-dailies nil
|
|
"A list of daily templates to generate.")
|
|
|
|
(defvar cce/journal-refresh-timer nil)
|
|
|
|
(with-eval-after-load 'org-capture
|
|
(add-to-list 'org-capture-templates
|
|
'("r" "Review Entries"))
|
|
(add-to-list 'org-capture-templates
|
|
'("j" "Journal Templates")))
|
|
|
|
(defun cce/update-defdailies ()
|
|
;; set up recurring timer to run this function at 11:55pm
|
|
(unless (and cce/journal-refresh-timer
|
|
(time-less-p (current-time) (timer--time cce/journal-refresh-timer)))
|
|
(setq cce/journal-refresh-timer
|
|
(run-at-time "1day" nil #'cce/update-defdailies)))
|
|
(dolist (daily defdaily-dailies)
|
|
(cce/defdaily daily)))
|
|
|
|
(defun cce/defdaily (daily)
|
|
(let ((plist (cddr daily)))
|
|
(let ((extra (list :tree-type 'week :unnarrowed 't))
|
|
(key (car daily))
|
|
(name (cadr daily))
|
|
(template (eval (plist-get plist :template)))
|
|
(file-name (eval (plist-get plist :path-fn))))
|
|
(message "Updating %s path to %s" name file-name)
|
|
|
|
;; remove
|
|
(setq org-capture-templates
|
|
(remove-if (lambda (elt) (equal (car elt) key))
|
|
org-capture-templates))
|
|
|
|
;; template
|
|
(unless (file-exists-p file-name)
|
|
(with-current-buffer (find-file-noselect file-name)
|
|
(insert (eval (plist-get plist :header)))
|
|
(save-buffer)))
|
|
|
|
;; set up template
|
|
(add-to-list 'org-capture-templates
|
|
(append `(,key ,name entry
|
|
(file+datetree ,file-name)
|
|
(file ,template))
|
|
(or (append (plist-get plist :extra) extra)
|
|
extra))))))
|
|
|
|
;; make sure this runs after all the defdailies have been defined
|
|
(add-hook 'after-cce-hook 'cce/update-defdailies)
|
|
(provide 'cce/defdaily)
|
|
#+end_src
|