ADD functions to jump to current plans

This commit is contained in:
Nathan Dwarshuis 2022-04-11 23:33:45 -04:00
parent 1e54f4f78e
commit c0ed24a48b
1 changed files with 76 additions and 10 deletions

View File

@ -173,6 +173,10 @@
(- daynum) (- daynum)
(org-x-dag-absolute-to-date)))) (org-x-dag-absolute-to-date))))
(defun org-x-dag-date-to-day-number (date)
(->> (org-x-dag-date-to-gregorian date)
(calendar-day-number)))
;; date <-> quarter ;; date <-> quarter
(defun org-x-dag-quarter-to-date (quarter) (defun org-x-dag-quarter-to-date (quarter)
@ -1560,6 +1564,9 @@ If FORCE is non-nil, sync no matter what."
(defun org-x-dag->current-date () (defun org-x-dag->current-date ()
(plist-get org-x-dag :current-date)) (plist-get org-x-dag :current-date))
(defun org-x-dag->selected-date ()
(plist-get org-x-dag :selected-date))
(defun org-x-dag->file-state () (defun org-x-dag->file-state ()
(plist-get org-x-dag :files)) (plist-get org-x-dag :files))
@ -3064,7 +3071,7 @@ review phase)"
(tag (alist-get daynum org-x-dag-weekly-tags))) (tag (alist-get daynum org-x-dag-weekly-tags)))
(org-x-dag-build-planning-headline title tag 3 nil subheadlines))) (org-x-dag-build-planning-headline title tag 3 nil subheadlines)))
;; id headline builders ;; planning headline builders
(defun org-x-dag-build-planning-id-headline (title level paragraph ids) (defun org-x-dag-build-planning-id-headline (title level paragraph ids)
(let ((sec (-some-> paragraph (let ((sec (-some-> paragraph
@ -3124,6 +3131,14 @@ review phase)"
subtrees))) subtrees)))
(list :categories cats :goals goals))) (list :categories cats :goals goals)))
(defun org-x-dag-qtp-get-headline (date)
(org-x-with-file (org-x-dag->planning-file :quarterly)
(-let (((y q) (org-x-dag-date-to-quarter date)))
(->> (org-ml-parse-subtrees 'all)
(org-x-dag-headlines-find-year y)
(org-ml-headline-get-subheadlines)
(org-x-dag-headlines-find-quarter q)))))
(defun org-x-dag-qtp-get (quarter) (defun org-x-dag-qtp-get (quarter)
(org-x-with-file (org-x-qtp-get-file) (org-x-with-file (org-x-qtp-get-file)
(-let (((year qnum) quarter)) (-let (((year qnum) quarter))
@ -3220,15 +3235,26 @@ review phase)"
(org-x-dag-build-day-of-week-headline daynum hls)) (org-x-dag-build-day-of-week-headline daynum hls))
plan)) plan))
(defun org-x-dag-wkp-get (week) (defun org-x-dag-wkp-get-week-headline (date)
(org-x-with-file (org-x-get-weekly-plan-file) (org-x-with-file (org-x-get-weekly-plan-file)
(-let (((year weeknum) week)) (-let (((y _ _) date)
(w (org-x-dag-date-to-week-number date)))
(->> (org-ml-parse-subtrees 'all) (->> (org-ml-parse-subtrees 'all)
(org-x-dag-headlines-find-year year) (org-x-dag-headlines-find-year y)
(org-ml-headline-get-subheadlines) (org-ml-headline-get-subheadlines)
(org-x-dag-headlines-find-week weeknum) (org-x-dag-headlines-find-week w)))))
(defun org-x-dag-wkp-get-day-headline (date)
(-let ((n (org-x-dag-date-to-day-number)))
(->> (org-x-dag-wkp-get-week-headline date)
(org-ml-headline-get-subheadlines) (org-ml-headline-get-subheadlines)
(org-x-dag-weekly-headlines-to-alist))))) (org-x-dag-headlines-find-day-of-week n))))
;; TODO these functions need to take dates and not 'week's (whatever those are)
(defun org-x-dag-wkp-get (week)
(->> (org-x-dag-wkp-get-day-headline date)
(org-ml-headline-get-subheadlines)
(org-x-dag-weekly-headlines-to-alist)))
(defun org-x-dag-wkp-set (week plan) (defun org-x-dag-wkp-set (week plan)
(cl-flet* (cl-flet*
@ -3282,7 +3308,7 @@ review phase)"
(org-x-dag-wkp-day-add week daynum))) (org-x-dag-wkp-day-add week daynum)))
;; TODO not DRY ;; TODO not DRY
(defun org-x-dag-dlp-get (date) (defun org-x-dag-dlp-get-headline (date)
(org-x-with-file (org-x-dag->planning-file :daily) (org-x-with-file (org-x-dag->planning-file :daily)
(-let (((y m d) date)) (-let (((y m d) date))
(->> (org-ml-parse-subtrees 'all) (->> (org-ml-parse-subtrees 'all)
@ -3290,8 +3316,11 @@ review phase)"
(org-ml-headline-get-subheadlines) (org-ml-headline-get-subheadlines)
(org-x-dag-headlines-find-month m) (org-x-dag-headlines-find-month m)
(org-ml-headline-get-subheadlines) (org-ml-headline-get-subheadlines)
(org-x-dag-headlines-find-day d) (org-x-dag-headlines-find-day d)))))
(org-ml-headline-get-subheadlines)))))
(defun org-x-dag-dlp-get (date)
(->> (org-x-dag-dlp-get-headline date)
(org-ml-headline-get-subheadlines)))
(defun org-x-dag-dlp-set (date headlines) (defun org-x-dag-dlp-set (date headlines)
(cl-flet* (cl-flet*
@ -3342,6 +3371,8 @@ review phase)"
;;; INTERACTIVE FUNCTIONS ;;; INTERACTIVE FUNCTIONS
;; current date
(defun org-x-dag-set-date () (defun org-x-dag-set-date ()
(interactive) (interactive)
(let ((date (->> (org-read-date nil t) (let ((date (->> (org-read-date nil t)
@ -3357,6 +3388,41 @@ review phase)"
(->> (plist-get org-x-dag :selected-date) (->> (plist-get org-x-dag :selected-date)
(apply #'message "Org-DAG date is %d-%02d-%02d"))) (apply #'message "Org-DAG date is %d-%02d-%02d")))
;; planning navigation
(defun org-x-dag--goto-current (what file-key hl-fun)
(declare (indent 2))
(-if-let (p (->> (org-x-dag->current-date)
(funcall hl-fun)
(org-ml-get-property :begin)))
(progn
(find-file (org-x-dag->planning-file file-key))
(goto-char p)
(org-reveal))
(message "%s does not exist for current date" what)))
(defun org-x-dag-goto-current-quarterly-plan ()
(interactive)
(org-x-dag--goto-current "Quarterly plan" :quarterly
#'org-x-dag-qtp-get-headline))
(defun org-x-dag-goto-current-weekly-plan ()
(interactive)
(org-x-dag--goto-current "Weekly plan (week)" :weekly
#'org-x-dag-wkp-get-week-headline))
(defun org-x-dag-goto-current-weekly-plan-day ()
(interactive)
(org-x-dag--goto-current "Weekly plan (day)" :weekly
#'org-x-dag-wkp-get-day-headline))
(defun org-x-dag-goto-current-daily-plan ()
(interactive)
(org-x-dag--goto-current "Daily plan" :daily
#'org-x-dag-dlp-get-headline))
;; node navigation
(defun org-x-dag-group-code (group) (defun org-x-dag-group-code (group)
(pcase group (pcase group
(:lifetime "LTG") (:lifetime "LTG")