From 73bed5c3dbefaf989b3ccd48f5921c6574a1a884 Mon Sep 17 00:00:00 2001 From: Benson Chu Date: Mon, 29 Jun 2020 14:38:42 -0500 Subject: [PATCH] Split up capture template config --- lisp/org-config/my-org-capture-templates.el | 402 +++++++++----------- lisp/org-config/my-org-weekly-review.el | 184 +++++++++ lisp/org-config/old-capture-templates.el | 58 +++ 3 files changed, 422 insertions(+), 222 deletions(-) create mode 100644 lisp/org-config/my-org-weekly-review.el create mode 100644 lisp/org-config/old-capture-templates.el diff --git a/lisp/org-config/my-org-capture-templates.el b/lisp/org-config/my-org-capture-templates.el index 6599012..acfaadd 100644 --- a/lisp/org-config/my-org-capture-templates.el +++ b/lisp/org-config/my-org-capture-templates.el @@ -25,226 +25,190 @@ ;;; Code: (require 'my-org-agenda-files) +;; Defines 3 things: +;; - #'setup-automatic-review +;; - #'finalize-review +;; - #'clear-out-review-files +(require 'my-org-weekly-review) + +(use-package doct) + +(defun doct-pad-and-icon-recursive (element) + (let* ((name (car element)) + (plist (cdr element)) + (icon (or (plist-get plist :icon) "")) + (children (plist-get plist :children))) + (setq plist (org-plist-delete plist :icon)) + (when children + (-as-> children it + (mapcar #'doct-pad-and-icon-recursive + it) + (plist-put plist :children it) + (setq plist it))) + (cons (format "%s\t%s" icon name) + plist))) + +(defun doct-pad-and-icon-all (orig list) + (funcall orig + (mapcar #'doct-pad-and-icon-recursive + list))) + +(advice-add #'doct :around #'doct-pad-and-icon-all) + (setq org-capture-templates - `(("t" ,(format "%s\tTodo" (all-the-icons-octicon "inbox" :face 'all-the-icons-yellow :v-adjust 0.01)) - entry (file ,(my/agenda-file "refile.org")) - "* STUFF %?\n:PROPERTIES:\n:CREATED: %U\n:VIEWING: %a\n:END:") - ("r" ,(format "%s\tReviews" (all-the-icons-faicon "share" :face 'all-the-icons-lblue))) - ("ra" "\tAutomatic Review" entry (file+function ,(my/org-file "entries/reviews.gpg") setup-automatic-review) - (file ,(my/org-file "templates/weekly-review.org"))) - ("rm" "\tManual Review" entry (file+function ,(my/org-file "entries/reviews.gpg") setup-manual-review) - (file ,(my/org-file "templates/weekly-review.org"))) - ("ro" "\tReorient" entry (file ,(my/org-file "entries/reviews.gpg")) - (file ,(my/org-file "templates/reorient.org"))) - ;; ("rt" "Review Task" entry (file+headline ,(my/org-file "entries/reviews.gpg") "Tasks") - ;; "* TODO %?") - ;; ("d" "\tDream" entry (file+olp+datetree ,(my/org-file "entries/dream.org")) - ;; "* %?") - ("D" "\tDistracted" entry (file ,(my/agenda-file "dev.org")) - "* TODO %?" :clock-in t :clock-resume t) - ("T" "\tNew Task" entry (file ,(my/agenda-file "dev.org")) - "* TODO %?" :clock-in t :clock-keep t) - ("m" ,(format "%s\tMoney" (all-the-icons-material "attach_money" :face 'all-the-icons-lgreen))) - ("mc" ,(format "%s\tCredit Card" (all-the-icons-faicon "credit-card" :face 'all-the-icons-blue)) - plain (file ,(my/org-file "entries/finances/ledger.ledger")) - (file ,(my/org-file "templates/credit.ledger")) :unnarrowed t :empty-lines 1) - ("mg" "\tGeneral" plain (file ,(my/org-file "entries/finances/ledger.ledger")) - (file ,(my/org-file "templates/basic.ledger")) :unnarrowed t :empty-lines 1) - ("c" "\tRecord Comms Message" entry (file+olp+datetree ,(my/agenda-file "datetree.org")) - "* TODO %?") - ("e" "\tEmacs config snippet" entry (file+headline "~/.emacs.d/config-base.org" "New") - "* %^{Title}\n#+begin_src emacs-lisp\n %?\n#+end_src") - ("j" "\tJournal") - ("jd" "\tDecision template" entry (file+olp+datetree ,(my/org-file "entries/journal.gpg")) - (file ,(my/org-file "templates/decide.org"))) - ("je" "\tJournal Entry" entry (file+olp+datetree ,(my/org-file "entries/journal.gpg")) - "* %<%R> %?") - ("jp" "\tProgramming Interview Prep Journal" entry (file+olp+datetree ,(my/org-file "entries/journal.gpg")) - "* ") - ("C" "\tCreate checklist") - ("Cc" "\tConference Via Bus" entry (file ,(my/agenda-file "dev.org")) - (file ,(my/org-file "checklists/conference.org")) - :conference/airplane nil) - ("Cm" "\tMorning routine" entry (file ,(my/org-file "entries/routines.org")) - (file ,(my/org-file "checklists/mornings.org"))) - ("Cn" "\tNightly routine" entry (file ,(my/org-file "entries/routines.org")) - (file ,(my/org-file "checklists/nights.org"))) - ;; ("y" "Elfeed YouTube" entry (file+olp ,(my/agenda-file "dev.org") "rewards" "Videos") - ;; "* TODO %(identity elfeed-link-org-capture)") - ("p" "\tProtocol" entry (file ,(my/agenda-file "refile.org")) - "* STUFF %^{Title}\n:PROPERTIES:\n:CREATED: %U\n:URL: %:link\n:END:\n#+begin_example\n%i\n#+end_example\n%?") - ("L" "\tProtocol Link" entry (file ,(my/agenda-file "refile.org")) - "* STUFF %? [[%:link][%:description]]\n:PROPERTIES:\n:CREATED: %U\n:URL: %:link\n:END:") - ("l" "\tAdd to lists conveniently") - ("lp" "Plan your day" entry (file+headline ,(my/agenda-file "dev.org") "The Plan") - (file ,(my/org-file "templates/daily-plan.org"))) - ("lc" "\tCringe" entry (file ,(my/org-file "entries/cringe.gpg")) "* %?") - ("lm" "\tMental Model" entry (file ,(my/org-file "entries/mental_models.gpg")) "* %?") - ("li" "\tImportant Information" entry (file ,(my/org-file "entries/important.gpg")) "* %?"))) + (doct `(("Todo" + :icon ,(all-the-icons-octicon "inbox" :face 'all-the-icons-yellow :v-adjust 0.01) + :keys "t" + :file ,(my/agenda-file "refile.org") + :template "* STUFF %?\n:PROPERTIES:\n:CREATED: %U\n:VIEWING: %a\n:END:") + ("Reviews" :keys "r" + :icon ,(all-the-icons-faicon "share" :face 'all-the-icons-lblue) + :children + (("Automatic Review" + :keys "a" + :file ,(my/org-file "entries/reviews.gpg") + :function setup-automatic-review + :before-finalize finalize-review + :after-finalize clear-out-review-files + :template-file ,(my/org-file "templates/weekly-review.org")) + ("Manual Review" + :keys "m" + :file ,(my/org-file "entries/reviews.gpg") + :function setup-manual-review + :template-file ,(my/org-file "templates/weekly-review.org")) + ("Reorient" + :keys "o" + :file ,(my/org-file "entries/reviews.gpg") + :template-file ,(my/org-file "templates/reorient.org")))) + ("Distracted" + :file ,(my/agenda-file "dev.org") + :keys "D" :clock-in t :clock-resume t + :template "* TASK %?") + ("New Task" :file ,(my/agenda-file "dev.org") + :keys "T" :clock-in t :clock-keep t + :template "* TASK %?") + ("Money" :keys "m" + :icon ,(all-the-icons-material "attach_money" :face 'all-the-icons-lgreen) + :children + (("Credit Card" + :keys "c" + :icon ,(all-the-icons-faicon "credit-card" :face 'all-the-icons-blue) + :file ,(my/org-file "entries/finances/ledger.ledger") + :unnarrowed t :empty-lines 1 :type plain + :template-file ,(my/org-file "templates/credit.ledger")) + ("General" :keys "g" + :unnarrowed t :empty-lines 1 :type plain + :file ,(my/org-file "entries/finances/ledger.ledger") + :template-file ,(my/org-file "templates/basic.ledger")))) + ("Record Comms Message" + :file ,(my/agenda-file "datetree.org") + :keys "c" + :datetree t + :template "* TODO %?") + ("Emacs config snippet" :keys "e" + :file "~/.emacs.d/config-base.org" + :headline "New" + :template "* %^{Title}\n#+begin_src emacs-lisp\n %?\n#+end_src") + ("Journal" :keys "j" :children + (("Decision Template" + :file ,(my/org-file "entries/journal.gpg") + :datetree t + :keys "d" + :template-file ,(my/org-file "templates/decide.org")) + ("Journal Entry" :keys "e" + :file ,(my/org-file "entries/journal.gpg") + :datetree t + :template "* %<%R> %?") + ("Programming Interview Prep Journal" :keys "p" + :file ,(my/org-file "entries/journal.gpg") + :datetree t + :template "* "))) + ("Create checklist" :keys "C" :children + (("Conference Via Bus" + :keys "c" + :file ,(my/agenda-file "dev.org") + :template-file ,(my/org-file "checklists/conference.org") + :conference/airplane nil) + ("Morning routine" + :keys "m" + :file ,(my/org-file "entries/routines.org") + :template-file ,(my/org-file "checklists/mornings.org")) + ("Nightly routine" + :keys "n" + :file ,(my/org-file "entries/routines.org") + :template-file ,(my/org-file "checklists/nights.org")))) + ("Protocol" + :keys "p" + :file ,(my/agenda-file "refile.org") + :template "* STUFF %^{Title}\n:PROPERTIES:\n:CREATED: %U\n:URL: %:link\n:END:\n#+begin_example\n%i\n#+end_example\n%?") + ("Protocol Link" + :keys "L" + :file ,(my/agenda-file "refile.org") + :before-finalize my/org-board-prompt + :template "* STUFF %? [[%:link][%:description]]\n:PROPERTIES:\n:CREATED: %U\n:URL: %:link\n:END:") + ("Add to lists conveniently" :keys "l" :children + (("Plan week" :keys "P" + :file ,(my/agenda-file "dev.org") + :headline "The Plan" + :template-file ,(my/org-file "templates/weekly-plan.org")) + ("Plan your day" :keys "p" + :file ,(my/agenda-file "dev.org") + :headline "The Plan" + :template-file ,(my/org-file "templates/daily-plan.org")) + ("Cringe" :keys "c" + :file ,(my/org-file "entries/cringe.gpg") + :template "* %?") + ("Mental Model" :keys "m" + :file ,(my/org-file "entries/mental_models.gpg") + :template "* %?") + ("Important Information" + :keys "i" + :file ,(my/org-file "entries/important.gpg") + :template "* %?"))) + ("Logging" :keys "g" :children + (("Source location" + :keys "s" + :function org-notes-find-file + :template "* %?\n%a") + ("Log entry" + :keys "l" + :function org-notes-find-file + :template "* %?") + ("Timer event" + :keys "t" :clock-in t :clock-keep t + :function org-notes-find-file + :template "* %?")))))) + + +(defvar themes-file "20200605172953_roll_dice_what_to_do.org") + +(defun read-short-term-theme () + (save-excursion + (let (filename) + ;; If org-roam is not loaded, or our themes file is gone + (if (or (not (boundp 'org-roam-directory)) + (not (file-exists-p + (setq filename + (expand-file-name themes-file org-roam-directory))))) + ;; Just read a string + (read-string "What's the theme for today? ") + ;; Otherwise, find that file, and do a completing read + (let ((buffer (find-file-noselect filename)) + headings) + (with-current-buffer buffer + (let ((num 0)) + (setq headings (mapcar #'(lambda (str) + (concat (int-to-string (incf num)) + "-" + str)) + (org-map-entries #'org-get-heading))))) + (let* ((match (ivy-completing-read "What's the theme for today? " + headings)) + (i (1+ (string-match "-" match)))) + (substring match i))))))) (defvar yearly-theme "Thought") -;; Functions required by template -(defun get-journal-entries-from (start-date end-date) - (let ((string "") - match) - (save-window-excursion - (switch-to-buffer (find-file-noselect "~/MEGA/org/entries/journal.gpg")) - (goto-char (point-min)) - (while (setq match - (re-search-forward - "^\\*\\*\\* \\(2[0-9]\\{3\\}-[0-9]\\{2\\}-[0-9]\\{2\\}\\) \\w+$" nil t)) - (let ((date (match-string 1))) - (when (and (org-time< start-date date) - (or (not end-date) (org-time< date end-date))) - (org-narrow-to-subtree) - (setq string (concat string "\n" (buffer-string))) - (widen)))) - (not-modified) - (kill-buffer)) - string)) - -;; Setup stuff, called by capture template -(defun get-last-review-date () - (save-window-excursion - (let ((auto-insert-alist nil)) - (set-buffer (find-file-noselect "~/.emacs.d/last-review.el"))) - (let ((res (buffer-string))) - (kill-buffer) - res))) - -(defun output-incomplete-date () - (save-window-excursion - (let ((auto-insert-alist nil)) - (switch-to-buffer (find-file-noselect "~/.emacs.d/review-incomplete.el"))) - (erase-buffer) - (insert (org-read-date nil nil "")) - (save-buffer) - (kill-buffer))) - -(defvar my/review-date-old nil) -(defun setup-automatic-review () - (unless current-prefix-arg - ;; Check for older review - (when (and (file-exists-p "~/.emacs.d/review-incomplete.el") - (y-or-n-p "Woah, we found an incomplete review. Would you like to use that date as the start date? ")) - (shell-command "mv ~/.emacs.d/review-incomplete.el ~/.emacs.d/last-review.el")) - ;; Setup current review - (let* ((date (org-read-date nil nil (get-last-review-date))) - (week (format "%02d" - (org-days-to-iso-week - (org-time-string-to-absolute date))))) - (output-incomplete-date) - (setq my/review-date-old date) - (setq my/review-visibility-level 6) - (org-capture-put :start-date date) - (org-capture-put :start-week week) - (goto-char (point-min)) - (re-search-forward "Reviews")))) - -(defun aux-get-week-string () - (let ((last (plist-get org-capture-plist :start-week)) - (this (format-time-string "%V"))) - (if (string= this last) - (concat "Week " this) - (concat "Weeks " last "-" this)))) - -(defun setup-manual-review () - ;; Read the date manually, and setup review accordingly - (let* ((org-read-date-prefer-future nil) - (date (org-read-date)) - (week (format "%02d" - (org-days-to-iso-week - (org-time-string-to-absolute date))))) - (output-incomplete-date) - (setq my/review-date-old date) - (setq my/review-visibility-level 6) - (org-capture-put :start-date date) - (org-capture-put :start-week week) - (goto-char (point-min)) - (re-search-forward "Reviews"))) - -;; Teardown stuff, called through hooks -(defun finalize-review () - "Save a copy of the weekly agenda, and write the current date - as the most current weekly review." - (let ((desc (plist-get org-capture-current-plist :description))) - (when (and (string= desc "Automatic Review") - my/review-date-old) - (my/save-agenda-week my/review-date-old) - (shell-command "rm ~/.emacs.d/review-incomplete.el") - (save-window-excursion - (switch-to-buffer (find-file-noselect "~/.emacs.d/last-review.el")) - (erase-buffer) - (insert (org-read-date nil nil "")) - (save-buffer) - (kill-buffer) - "") - (setq my/review-date-old nil)))) -(add-hook 'org-capture-before-finalize-hook 'finalize-review) - -(defun clear-out-review-files () - (when (file-exists-p "~/.emacs.d/review-incomplete.el") - (shell-command "rm ~/.emacs.d/review-incomplete.el"))) -(add-hook 'org-capture-after-finalize-hook #'clear-out-review-files) -(defconst my/org-agenda-snapshot-pdf-filename "~/MEGA/org/entries/review/%Y_%m_%d.pdf") -(defconst my/org-agenda-snapshot-html-filename "~/MEGA/org/entries/review/%Y_%m_%d.html") - -(defun my/agenda-dates (start &optional end) - (interactive (list (let ((org-read-date-prefer-future nil)) - (org-read-date)))) - (when-let (buf (get-buffer "*Org Agenda(a)*")) - (kill-buffer buf)) - (or end (setq end (org-read-date nil nil "."))) - (let* ((span (- (org-time-string-to-absolute end) - (org-time-string-to-absolute start))) - (org-agenda-archives-mode t) - (org-agenda-start-with-log-mode '(closed clock)) - (org-agenda-start-on-weekday nil) - (org-agenda-start-day start) - (org-agenda-span span)) - (org-agenda-list nil) - (put 'org-agenda-redo-command 'org-lprops - `((org-agenda-archives-mode t) - (org-agenda-start-with-log-mode '(closed clock)) - (org-agenda-start-on-weekday nil) - (org-agenda-start-day ,start) - (org-agenda-span ,span))))) - -;; (my/agenda-dates "2019-07-14") - -(defun my/save-agenda-week (start &optional end) - (interactive (list (let ((org-read-date-prefer-future nil)) - (org-read-date)))) - (let ((end (or end (org-read-date nil nil ".")))) - (save-window-excursion - (my/agenda-dates start end) - (org-agenda-write (format-time-string my/org-agenda-snapshot-pdf-filename (org-time-string-to-time end))) - (org-agenda-write (format-time-string my/org-agenda-snapshot-html-filename (org-time-string-to-time end)))))) - -;; (my/save-agenda-week "2019-06-03" "2019-08-18") - -;; (my/save-agenda-week "2019-07-14") - -(defun my/png-ize-buffer (buffer name-without-ext) - (with-current-buffer (htmlize-buffer buffer) - (write-file (my/agenda-file (concat name-without-ext ".html")))) - (shell-command (format "wkhtmltoimage %s %s" - (my/agenda-file (concat name-without-ext ".html")) - (my/agenda-file (concat name-without-ext ".png"))))) - -(defun my/write-agendas-for-review () - (interactive) - (let* ((org-agenda-sticky nil) - (dev (save-excursion - (org-agenda nil "d") - (current-buffer))) - (week (save-excursion - (org-agenda nil "d") - (current-buffer)))) - (my/png-ize-buffer dev "org-agenda") - (my/png-ize-buffer week "org-week"))) - (defun my/org-add-tag (tag) (org-set-tags (cons tag (org-get-tags nil t)))) @@ -261,15 +225,9 @@ (y-or-n-p "Do you want to archive the page? ")) (call-interactively #'org-board-archive)))) -(add-hook 'org-capture-before-finalize-hook 'my/org-board-prompt) - ;; New Note-taking capture template (defvar org-notes-current-file nil) -(add-to-list 'org-capture-templates - '("n" "\tNotes" entry (function org-notes-find-file) - "* %A\n%?")) - (defun org-notes-find-file () (when (or current-prefix-arg (not org-notes-current-file)) diff --git a/lisp/org-config/my-org-weekly-review.el b/lisp/org-config/my-org-weekly-review.el new file mode 100644 index 0000000..e2389c8 --- /dev/null +++ b/lisp/org-config/my-org-weekly-review.el @@ -0,0 +1,184 @@ +;;; my-org-weekly-review.el --- -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Benson Chu + +;; Author: Benson Chu +;; Created: [2020-06-21 18:01] + +;; This file is not part of GNU Emacs + +;; This program is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;;; Code: + +;; Functions required by template +(defun get-journal-entries-from (start-date end-date) + (let ((string "") + match) + (save-window-excursion + (switch-to-buffer (find-file-noselect "~/MEGA/org/entries/journal.gpg")) + (goto-char (point-min)) + (while (setq match + (re-search-forward + "^\\*\\*\\* \\(2[0-9]\\{3\\}-[0-9]\\{2\\}-[0-9]\\{2\\}\\) \\w+$" nil t)) + (let ((date (match-string 1))) + (when (and (org-time< start-date date) + (or (not end-date) (org-time< date end-date))) + (org-narrow-to-subtree) + (setq string (concat string "\n" (buffer-string))) + (widen)))) + (not-modified) + (kill-buffer)) + string)) + +;; Setup stuff, called by capture template +(defun get-last-review-date () + (save-window-excursion + (let ((auto-insert-alist nil)) + (set-buffer (find-file-noselect "~/.emacs.d/last-review.el"))) + (let ((res (buffer-string))) + (kill-buffer) + res))) + +(defun output-incomplete-date () + (save-window-excursion + (let ((auto-insert-alist nil)) + (switch-to-buffer (find-file-noselect "~/.emacs.d/review-incomplete.el"))) + (erase-buffer) + (insert (org-read-date nil nil "")) + (save-buffer) + (kill-buffer))) + +(defvar my/review-date-old nil) +(defun setup-automatic-review () + (unless current-prefix-arg + ;; Check for older review + (when (and (file-exists-p "~/.emacs.d/review-incomplete.el") + (y-or-n-p "Woah, we found an incomplete review. Would you like to use that date as the start date? ")) + (shell-command "mv ~/.emacs.d/review-incomplete.el ~/.emacs.d/last-review.el")) + ;; Setup current review + (let* ((date (org-read-date nil nil (get-last-review-date))) + (week (format "%02d" + (org-days-to-iso-week + (org-time-string-to-absolute date))))) + (output-incomplete-date) + (setq my/review-date-old date) + (setq my/review-visibility-level 6) + (org-capture-put :start-date date) + (org-capture-put :start-week week)))) + +(defun aux-get-week-string () + (let ((last (plist-get org-capture-plist :start-week)) + (this (format-time-string "%V"))) + (if (string= this last) + (concat "Week " this) + (concat "Weeks " last "-" this)))) + +(defun setup-manual-review () + ;; Read the date manually, and setup review accordingly + (let* ((org-read-date-prefer-future nil) + (date (org-read-date)) + (week (format "%02d" + (org-days-to-iso-week + (org-time-string-to-absolute date))))) + (output-incomplete-date) + (setq my/review-date-old date) + (setq my/review-visibility-level 6) + (org-capture-put :start-date date) + (org-capture-put :start-week week) + (goto-char (point-min)) + (re-search-forward "Reviews"))) + +;; Teardown stuff, called through hooks +(defun finalize-review () + "Save a copy of the weekly agenda, and write the current date + as the most current weekly review." + (let ((desc (plist-get org-capture-current-plist :description))) + (when my/review-date-old + (my/save-agenda-week my/review-date-old) + (shell-command "rm ~/.emacs.d/review-incomplete.el") + (save-window-excursion + (switch-to-buffer (find-file-noselect "~/.emacs.d/last-review.el")) + (erase-buffer) + (insert (org-read-date nil nil "")) + (save-buffer) + (kill-buffer) + "") + (setq my/review-date-old nil)))) + +(defun clear-out-review-files () + (when (file-exists-p "~/.emacs.d/review-incomplete.el") + (shell-command "rm ~/.emacs.d/review-incomplete.el"))) +(defconst my/org-agenda-snapshot-pdf-filename "~/MEGA/org/entries/review/%Y_%m_%d.pdf") +(defconst my/org-agenda-snapshot-html-filename "~/MEGA/org/entries/review/%Y_%m_%d.html") + +(defun my/agenda-dates (start &optional end) + (interactive (list (let ((org-read-date-prefer-future nil)) + (org-read-date)))) + (when-let (buf (get-buffer "*Org Agenda(a)*")) + (kill-buffer buf)) + (or end (setq end (org-read-date nil nil "."))) + (let* ((span (- (org-time-string-to-absolute end) + (org-time-string-to-absolute start))) + (org-agenda-archives-mode t) + (org-agenda-start-with-log-mode '(closed clock)) + (org-agenda-start-on-weekday nil) + (org-agenda-start-day start) + (org-agenda-span span)) + (org-agenda-list nil) + (put 'org-agenda-redo-command 'org-lprops + `((org-agenda-archives-mode t) + (org-agenda-start-with-log-mode '(closed clock)) + (org-agenda-start-on-weekday nil) + (org-agenda-start-day ,start) + (org-agenda-span ,span))))) + +;; (my/agenda-dates "2019-07-14") + +(defun my/save-agenda-week (start &optional end) + (interactive (list (let ((org-read-date-prefer-future nil)) + (org-read-date)))) + (let ((end (or end (org-read-date nil nil ".")))) + (save-window-excursion + (my/agenda-dates start end) + (org-agenda-write (format-time-string my/org-agenda-snapshot-pdf-filename (org-time-string-to-time end))) + (org-agenda-write (format-time-string my/org-agenda-snapshot-html-filename (org-time-string-to-time end)))))) + +;; (my/save-agenda-week "2019-06-03" "2019-08-18") + +;; (my/save-agenda-week "2019-07-14") + +(defun my/png-ize-buffer (buffer name-without-ext) + (with-current-buffer (htmlize-buffer buffer) + (write-file (my/agenda-file (concat name-without-ext ".html")))) + (shell-command (format "wkhtmltoimage %s %s" + (my/agenda-file (concat name-without-ext ".html")) + (my/agenda-file (concat name-without-ext ".png"))))) + +(defun my/write-agendas-for-review () + (interactive) + (let* ((org-agenda-sticky nil) + (dev (save-excursion + (org-agenda nil "d") + (current-buffer))) + (week (save-excursion + (org-agenda nil "d") + (current-buffer)))) + (my/png-ize-buffer dev "org-agenda") + (my/png-ize-buffer week "org-week"))) + +(provide 'my-org-weekly-review) +;;; my-org-weekly-review.el ends here diff --git a/lisp/org-config/old-capture-templates.el b/lisp/org-config/old-capture-templates.el new file mode 100644 index 0000000..bfdc3a2 --- /dev/null +++ b/lisp/org-config/old-capture-templates.el @@ -0,0 +1,58 @@ +(setq org-capture-templates-old + `(("t" ,(format "%s\tTodo" (all-the-icons-octicon "inbox" :face 'all-the-icons-yellow :v-adjust 0.01)) + entry (file ,(my/agenda-file "refile.org")) + "* STUFF %?\n:PROPERTIES:\n:CREATED: %U\n:VIEWING: %a\n:END:") + ("r" ,(format "%s\tReviews" (all-the-icons-faicon "share" :face 'all-the-icons-lblue))) + ("ra" "\tAutomatic Review" entry (file+function ,(my/org-file "entries/reviews.gpg") setup-automatic-review) + (file ,(my/org-file "templates/weekly-review.org"))) + ("rm" "\tManual Review" entry (file+function ,(my/org-file "entries/reviews.gpg") setup-manual-review) + (file ,(my/org-file "templates/weekly-review.org"))) + ("ro" "\tReorient" entry (file ,(my/org-file "entries/reviews.gpg")) + (file ,(my/org-file "templates/reorient.org"))) + ;; ("rt" "Review Task" entry (file+headline ,(my/org-file "entries/reviews.gpg") "Tasks") + ;; "* TODO %?") + ;; ("d" "\tDream" entry (file+olp+datetree ,(my/org-file "entries/dream.org")) + ;; "* %?") + ("D" "\tDistracted" entry (file ,(my/agenda-file "dev.org")) + "* TODO %?" :clock-in t :clock-resume t) + ("T" "\tNew Task" entry (file ,(my/agenda-file "dev.org")) + "* TODO %?" :clock-in t :clock-keep t) + ("m" ,(format "%s\tMoney" (all-the-icons-material "attach_money" :face 'all-the-icons-lgreen))) + ("mc" ,(format "%s\tCredit Card" (all-the-icons-faicon "credit-card" :face 'all-the-icons-blue)) + plain (file ,(my/org-file "entries/finances/ledger.ledger")) + (file ,(my/org-file "templates/credit.ledger")) :unnarrowed t :empty-lines 1) + ("mg" "\tGeneral" plain (file ,(my/org-file "entries/finances/ledger.ledger")) + (file ,(my/org-file "templates/basic.ledger")) :unnarrowed t :empty-lines 1) + ("c" "\tRecord Comms Message" entry (file+olp+datetree ,(my/agenda-file "datetree.org")) + "* TODO %?") + ("e" "\tEmacs config snippet" entry (file+headline "~/.emacs.d/config-base.org" "New") + "* %^{Title}\n#+begin_src emacs-lisp\n %?\n#+end_src") + ("j" "\tJournal") + ("jd" "\tDecision template" entry (file+olp+datetree ,(my/org-file "entries/journal.gpg")) + (file ,(my/org-file "templates/decide.org"))) + ("je" "\tJournal Entry" entry (file+olp+datetree ,(my/org-file "entries/journal.gpg")) + "* %<%R> %?") + ("jp" "\tProgramming Interview Prep Journal" entry (file+olp+datetree ,(my/org-file "entries/journal.gpg")) + "* ") + ("C" "\tCreate checklist") + ("Cc" "\tConference Via Bus" entry (file ,(my/agenda-file "dev.org")) + (file ,(my/org-file "checklists/conference.org")) + :conference/airplane nil) + ("Cm" "\tMorning routine" entry (file ,(my/org-file "entries/routines.org")) + (file ,(my/org-file "checklists/mornings.org"))) + ("Cn" "\tNightly routine" entry (file ,(my/org-file "entries/routines.org")) + (file ,(my/org-file "checklists/nights.org"))) + ;; ("y" "Elfeed YouTube" entry (file+olp ,(my/agenda-file "dev.org") "rewards" "Videos") + ;; "* TODO %(identity elfeed-link-org-capture)") + ("p" "\tProtocol" entry (file ,(my/agenda-file "refile.org")) + "* STUFF %^{Title}\n:PROPERTIES:\n:CREATED: %U\n:URL: %:link\n:END:\n#+begin_example\n%i\n#+end_example\n%?") + ("L" "\tProtocol Link" entry (file ,(my/agenda-file "refile.org")) + "* STUFF %? [[%:link][%:description]]\n:PROPERTIES:\n:CREATED: %U\n:URL: %:link\n:END:") + ("l" "\tAdd to lists conveniently") + ("lP" "Plan week" entry (file+headline ,(my/agenda-file "dev.org") "The Plan") + (file ,(my/org-file "templates/weekly-plan.org"))) + ("lp" "Plan your day" entry (file+headline ,(my/agenda-file "dev.org") "The Plan") + (file ,(my/org-file "templates/daily-plan.org"))) + ("lc" "\tCringe" entry (file ,(my/org-file "entries/cringe.gpg")) "* %?") + ("lm" "\tMental Model" entry (file ,(my/org-file "entries/mental_models.gpg")) "* %?") + ("li" "\tImportant Information" entry (file ,(my/org-file "entries/important.gpg")) "* %?")))