diff options
author | bd <bdunahu@operationnull.com> | 2024-11-23 15:41:34 -0500 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2024-11-23 15:41:34 -0500 |
commit | d0c3dbf9292b3f88f5874a0098ec583322c7cdc4 (patch) | |
tree | e1f644049c2cdf735cd0612afb8a2c409ced2579 /.config | |
parent | 3308121a14308c8a3e376f45ec15aeda36d95534 (diff) |
Refactor bd--org.el, rewrite new org agenda views
Diffstat (limited to '.config')
-rw-r--r-- | .config/emacs/modules/bd--org.el | 203 |
1 files changed, 138 insertions, 65 deletions
diff --git a/.config/emacs/modules/bd--org.el b/.config/emacs/modules/bd--org.el index d9256e2..e2a251c 100644 --- a/.config/emacs/modules/bd--org.el +++ b/.config/emacs/modules/bd--org.el @@ -3,16 +3,13 @@ ;;; Code: -(defvar-local agenda-file "~/dc/agenda/agenda_tasks.org") - (use-package org - :demand t - :bind - (("C-c n a" . org-agenda) - ("C-c n c" . org-capture) - ("C-c n s" . org-schedule) - ("C-c n d" . org-deadline) - ("C-c n r" . org-refile)) + :custom + (org-ellipsis " ▾") + (org-babel-python-command "python3") + (org-confirm-babel-evaluate nil) + (org-hide-emphasis-markers t) + (org-startup-folded 'show3levels) :config (defun bd/org-mode-setup-hook () "Sets up improved org-mode defaults upon @@ -24,7 +21,6 @@ each org file open." (plist-put org-format-latex-options :scale 1.2) (push '("\\.pdf\\'" . "zathura %s") org-file-apps) - (org-babel-do-load-languages 'org-babel-load-languages '((emacs-lisp . t) @@ -32,69 +28,146 @@ each org file open." (lisp . t) (scheme . t) (dot . t) - (python . t))) + (python . t)))) - (advice-add 'org-refile :after 'org-save-all-org-buffers) +(use-package ox :custom - (org-startup-folded 'show2levels) (org-latex-toc-command "\\tableofcontents \\clearpage") - (org-ellipsis " ▾") - (org-hide-emphasis-markers t) (org-export-with-toc nil) - (org-export-preserve-breaks t) - (org-agenda-files `(,agenda-file "~/dc/agenda/archived_tasks.org")) - (org-deadline-warning-days 7) - (org-log-done 'time) - (org-log-into-drawer "history") - (org-babel-python-command "python3") + (org-export-preserve-breaks t)) + +(use-package org-agenda + :bind + (("C-c n a" . org-agenda) + ("C-c n c" . org-capture) + ("C-c n s" . org-schedule) + ("C-c n d" . org-deadline) + ("C-c n r" . org-refile)) + :config + (advice-add 'org-refile :after 'org-save-all-org-buffers) + + (defvar-local agenda-file "~/dc/agenda/agenda_tasks.org") + + (defvar-local bd/course-list + '(("520" . ?2) + ("575" . ?7) + ("610" . ?1)) + "Courses for tagging, capturing, and various +agenda views.") + + (defvar-local bd/device-list + '(("garm" . ?G) + ("heimdallr" . ?H) + ("hodr" . ?M) + ("surt" . ?I) + ("vali" . ?V)) + "Devices for tagging, capturing, and various +agenda views.") + + (defun bd/combine-tags (tag-alist add? or-p) + "Given TAG-ALIST in the form of +ORG-TAG-ALIST, returns a concatenated string +representing all the tags ORd or ANDed together." + (apply #'concat + (mapcar (lambda (e) + (concat (when or-p "|") (if add? "+" "-") (car e))) + tag-alist))) - (org-todo-keywords - '((sequence "TODO(t)" "NEXT(n!)" "HOLD(h!)" "|" "DONE(d)" "CANC(c)"))) + (setopt org-log-done 'time + org-deadline-warning-days 7 + org-log-into-drawer "history" + org-agenda-restore-windows-after-quit t + org-agenda-show-future-repeats nil + org-todo-keywords + '((sequence "TODO(t)" "NEXT(n!)" "HOLD(h!)" "|" "DONE(d)" "CANC(c)")) + org-tag-alist + `(("chore" . ?C) + ,@bd/device-list - (org-refile-targets ; refile into the headings of these files, not tags - '(("archived_tasks.org" :maxlevel . 1) - ("agenda_tasks.org" :maxlevel . 1))) + ("idea" . ?i) + ("programming" . ?p) + ("web" . ?s) + ("writing" . ?w) + ("reading" . ?r) - (org-capture-templates - `(("c" " College") - ("cs" "Software Engineering Theory" entry (file+olp ,agenda-file "CS520") - "* TODO %?\n DEADLINE: %^t") - ("cm" "Combinatorics/Graph Theory" entry (file+olp ,agenda-file "CS575") - "* TODO %?\n DEADLINE: %^t") - ("cc" "Compiler Techniques" entry (file+olp ,agenda-file "CS610") - "* TODO %?\n DEADLINE: %^t") - ("s" " Self") - ("si" "Idea" entry (file+olp ,agenda-file "Idea / Return") - "* TODO %?\n %u") - ("sc" "Context" entry (file+olp ,agenda-file "Idea / Return") - "* TODO %?\n %a") - ("st" "Deadline" entry (file+olp ,agenda-file "Deadline") - "* TODO %?\n DEADLINE: %^t") - ("sb" "Book" entry (file+olp ,agenda-file "Book List") - "* TODO %?\n %u"))) + ,@bd/course-list) + org-refile-targets '(("archived_tasks.org" :maxlevel . 1) + ("agenda_tasks.org" :maxlevel . 1)) + org-agenda-files `(,agenda-file "~/dc/agenda/archived_tasks.org") + org-capture-templates + `(("c" " College") + ("cs" "Software Engineering Theory" entry (file+olp ,agenda-file "CS520") + "* TODO %?\n DEADLINE: %^t") + ("cm" "Combinatorics/Graph Theory" entry (file+olp ,agenda-file "CS575") + "* TODO %?\n DEADLINE: %^t") + ("cc" "Compiler Techniques" entry (file+olp ,agenda-file "CS610") + "* TODO %?\n DEADLINE: %^t") + ("s" " Self") + ("si" "Idea" entry (file+olp ,agenda-file "Idea / Return") + "* TODO %?\n %u") + ("sc" "Context" entry (file+olp ,agenda-file "Idea / Return") + "* TODO %?\n %a") + ("st" "Deadline" entry (file+olp ,agenda-file "Deadline") + "* TODO %?\n DEADLINE: %^t") + ("sb" "Book" entry (file+olp ,agenda-file "Book List") + "* TODO %?\n %u"))) - (org-agenda-restore-windows-after-quit t) - (org-agenda-custom-commands - '(("S" "Standard Block Agenda" - ((tags-todo "*" - ((org-agenda-skip-function '(org-agenda-skip-if nil '(timestamp))) - (org-agenda-block-separator nil) - (org-agenda-skip-function '(org-agenda-skip-entry-if 'todo '("HOLD"))) - (org-agenda-overriding-header "Undated Tasks\n"))) - (agenda "" ((org-agenda-span 8) - (org-deadline-warning-days 0) - (org-agenda-block-separator nil) - (org-scheduled-past-days 4) - (org-agenda-skip-function '(org-agenda-skip-entry-if 'todo '("HOLD"))) - (org-agenda-overriding-header "\nUpcoming Tasks\n"))) - (agenda "" ((org-agenda-time-grid nil) - (org-agenda-show-all-dates nil) - (org-agenda-span 21) - (org-deadline-warning-days 0) - (org-agenda-block-separator nil) - (org-agenda-entry-types '(:deadline)) - (org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done)) - (org-agenda-overriding-header "\nFuture Deadlines (+21d)\n")))))))) + (let ((orphan-view '(tags-todo "-{.*}" + ((org-agenda-block-separator nil) + (org-agenda-overriding-header "\nOrphaned Items\n"))))) + (setopt org-agenda-custom-commands + `(("c" "Chores" + ((agenda "" ((org-agenda-block-separator nil) + (org-agenda-entry-types '(:deadline)) + (org-agenda-show-all-dates nil) + (org-agenda-span 21) + (org-deadline-warning-days 0) + (org-agenda-skip-function + '(org-agenda-skip-entry-if 'notregexp + (regexp-opt (cons "chore" (mapcar #'car bd/device-list))))) + (org-agenda-overriding-header "\nPriority Deadlines (+21d)\n"))) + (tags-todo (concat "chore" (bd/combine-tags bd/device-list nil nil)) + ((org-agenda-block-separator nil) + (org-agenda-overriding-header "Mundane\n"))) + ,@(mapcar (lambda (e) + `(tags-todo ,(car e) + ((org-agenda-block-separator nil) + (org-agenda-overriding-header + (concat "\nDevice: " ,(capitalize (car e)) "\n"))))) + bd/device-list) + ,orphan-view)) + ("r" "Recreational" + ((tags-todo "+idea" + ((org-agenda-block-separator nil) + (org-agenda-skip-function + '(org-agenda-skip-entry-if 'regexp "chore")) + (org-agenda-overriding-header "Ideas\n"))) + (tags-todo "+reading|+writing" + ((org-agenda-block-separator nil) + (org-agenda-skip-function + '(org-agenda-skip-entry-if 'regexp "chore")) + (org-agenda-overriding-header "\nReading/Writing\n"))) + (tags-todo "+programming|+web" + ((org-agenda-block-separator nil) + (org-agenda-skip-function + '(org-agenda-skip-entry-if 'regexp "chore")) + (org-agenda-overriding-header "\nProgramming\n"))) + ,orphan-view)) + ("s" "College" + ((tags-todo (bd/combine-tags bd/course-list t t) + ((org-agenda-block-separator nil) + (org-agenda-overriding-header "\nAll Courses\n"))) + (agenda "" ((org-agenda-block-separator nil) + (org-agenda-entry-types '(:deadline :scheduled)) + (org-agenda-show-all-dates nil) + (org-agenda-span 15) + (org-deadline-warning-days 0) + (org-scheduled-past-days 7) + (org-agenda-skip-function + '(org-agenda-skip-entry-if 'notregexp + (regexp-opt (mapcar #'car bd/course-list)))) + (org-agenda-overriding-header "\nUpcoming Deadlines (+15d)\n"))) + ,orphan-view)))))) (provide 'bd--org) |