summaryrefslogtreecommitdiff
path: root/.config/emacs
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2024-11-23 15:41:34 -0500
committerbd <bdunahu@operationnull.com>2024-11-23 15:41:34 -0500
commitd0c3dbf9292b3f88f5874a0098ec583322c7cdc4 (patch)
treee1f644049c2cdf735cd0612afb8a2c409ced2579 /.config/emacs
parent3308121a14308c8a3e376f45ec15aeda36d95534 (diff)
Refactor bd--org.el, rewrite new org agenda views
Diffstat (limited to '.config/emacs')
-rw-r--r--.config/emacs/modules/bd--org.el203
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)