Merge branch 'propagate_scheduled'

This commit is contained in:
Nathan Dwarshuis 2022-06-05 14:40:47 -04:00
commit bd40a9bbf9
2 changed files with 292 additions and 187 deletions

View File

@ -668,9 +668,9 @@ used for optimization."
(lambda (child-bs) (lambda (child-bs)
(funcall stop-fun (plist-get child-bs :local))))) (funcall stop-fun (plist-get child-bs :local)))))
;; [Status a] -> b -> (a -> a -> Status Bool) -> (a -> Bool) -> (a -> Status b) ;; [Status a] -> b -> (a -> a -> Status Bool) -> (a -> Bool) -> (a -> [c])
;; -> Status b ;; -> (a -> [c] -> Status b) -> Status b
(defun org-x-dag-bs-rankfold-children (bss default rank-fun stop-fun trans-fun) (defun org-x-dag-bs-rankfold-children (bss default rank-fun stop-fun acc-fun trans-fun)
(declare (indent 2)) (declare (indent 2))
(let ((err (either :left "Child error"))) (let ((err (either :left "Child error")))
(cl-labels (cl-labels
@ -680,26 +680,43 @@ used for optimization."
(-let (((x . rest) xs)) (-let (((x . rest) xs))
(pcase x (pcase x
(`(:right ,r) (`(:right ,r)
(either>>= (funcall rank-fun acc r) (-let (((cur as) acc))
(if (not it) (fold-rank acc rest) (either>>= (funcall rank-fun cur r)
(if (funcall stop-fun r) x (fold-rank r rest))))) (let ((as* (append (funcall acc-fun it) as)))
(if (not it) (fold-rank `(,cur ,as*) rest)
(if (funcall stop-fun r)
;; if we encounter the stop condition, apply the
;; accumulator function to all remaining rights
;; and collect as we break the recursion loop
(->> (either-rights rest)
(--mapcat (funcall acc-fun it))
(append as*)
(list r)
(either :right))
(fold-rank `(,r ,as*) rest)))))))
(_ err)))))) (_ err))))))
(if (not bss) (either :right default) (if (not bss) (either :right default)
(pcase (car bss) (pcase (car bss)
(`(:right ,r) (`(:right ,r)
(if (funcall stop-fun r) (funcall trans-fun r) (if (funcall stop-fun r)
(either>>= (fold-rank r (cdr bss)) (->> (funcall acc-fun r)
(funcall trans-fun it)))) (list)
(funcall trans-fun r))
(either>>= (fold-rank (list r nil) (cdr bss))
(-let (((cur as) it))
(funcall trans-fun cur as)))))
(_ err)))))) (_ err))))))
(defun org-x-dag-bs-action-rankfold-children (bss default rank-fun stop-fun (defun org-x-dag-bs-action-rankfold-children (bss default rank-fun stop-fun
trans-fun) acc-fun trans-fun)
(cl-flet ((get-local (x) (plist-get x :local))) (cl-flet ((get-local (x) (plist-get x :local)))
(declare (indent 2)) (declare (indent 2))
(org-x-dag-bs-rankfold-children bss default (org-x-dag-bs-rankfold-children bss default
(-on rank-fun #'get-local) (-on rank-fun #'get-local)
(-compose stop-fun #'get-local) (-compose stop-fun #'get-local)
(-compose trans-fun #'get-local)))) acc-fun
(lambda (x as)
(funcall trans-fun (get-local x) as)))))
(defmacro org-x-dag-left (fmt &rest args) (defmacro org-x-dag-left (fmt &rest args)
`(either :left (format ,fmt ,@args))) `(either :left (format ,fmt ,@args)))
@ -782,6 +799,9 @@ deadline (eg via epoch time) or if it has a repeater."
((new-proj ((new-proj
(status) (status)
(either :right `(:sp-proj ,status))) (either :right `(:sp-proj ,status)))
(new-active-proj
(timestamps)
(either :right `(:sp-proj :proj-active (:child-scheds ,timestamps))))
(is-next (is-next
(task-data) (task-data)
(-let (((&plist :todo :sched) task-data)) (-let (((&plist :todo :sched) task-data))
@ -826,7 +846,7 @@ deadline (eg via epoch time) or if it has a repeater."
(`((:sp-task :task-active ,a) (:sp-task :task-active ,b)) (`((:sp-task :task-active ,a) (:sp-task :task-active ,b))
(and (not (is-next a)) (is-next b))) (and (not (is-next a)) (is-next b)))
(`(,(or `(:sp-proj :proj-active) (`(,(or `(:sp-proj :proj-active ,_)
`(:sp-proj :proj-wait) `(:sp-proj :proj-wait)
`(:sp-proj :proj-held) `(:sp-proj :proj-held)
`(:sp-proj :proj-stuck) `(:sp-proj :proj-stuck)
@ -836,7 +856,7 @@ deadline (eg via epoch time) or if it has a repeater."
(is-next d)) (is-next d))
(`((:sp-task :task-active ,d) (`((:sp-task :task-active ,d)
,(or `(:sp-proj :proj-active) ,(or `(:sp-proj :proj-active ,_)
`(:sp-proj :proj-wait) `(:sp-proj :proj-wait)
`(:sp-proj :proj-held) `(:sp-proj :proj-held)
`(:sp-proj :proj-stuck) `(:sp-proj :proj-stuck)
@ -845,8 +865,8 @@ deadline (eg via epoch time) or if it has a repeater."
(not (is-next d))) (not (is-next d)))
(`((:sp-iter :iter-active ,_) ,_) nil) (`((:sp-iter :iter-active ,_) ,_) nil)
(`((:sp-proj :proj-active) ,_) nil) (`((:sp-proj :proj-active ,_) ,_) nil)
(`(,_ (:sp-proj :proj-active)) t) (`(,_ (:sp-proj :proj-active ,_)) t)
(`(,_ (:sp-iter :iter-active ,_)) t) (`(,_ (:sp-iter :iter-active ,_)) t)
(`((:sp-proj :proj-wait) ,_) nil) (`((:sp-proj :proj-wait) ,_) nil)
@ -875,23 +895,30 @@ deadline (eg via epoch time) or if it has a repeater."
(`(:sp-task :task-active ,d) (is-next d)) (`(:sp-task :task-active ,d) (is-next d))
(_ nil))) (_ nil)))
(lambda (acc) (lambda (next)
(pcase next
(`(:sp-iter :iter-active ,d) (plist-get d :child-scheds))
(`(:sp-task :task-active ,d) (list (plist-get d :sched)))
(`(:sp-proj :proj-active ,d) (plist-get d :child-scheds))
(_ nil)))
(lambda (acc cs)
(pcase acc (pcase acc
((or `(:sp-proj :proj-complete ,_) ((or `(:sp-proj :proj-complete ,_)
`(:sp-task :task-complete ,_) `(:sp-task :task-complete ,_)
`(:sp-iter :iter-complete ,_)) `(:sp-iter :iter-complete ,_))
(->> "Active projects must have at least one active child" (->> "Active projects must have at least one active child"
(either :left ))) (either :left )))
(`(:sp-proj :proj-active ,_) (new-active-proj cs))
(`(:sp-proj ,s) (new-proj s)) (`(:sp-proj ,s) (new-proj s))
(`(:sp-iter :iter-active ,_) (new-proj :proj-active)) (`(:sp-iter :iter-active ,_) (new-active-proj cs))
(`(:sp-iter :iter-empty) (new-proj :proj-stuck)) (`(:sp-iter :iter-empty) (new-proj :proj-stuck))
(`(:sp-task :task-active ,d) (`(:sp-task :task-active ,d)
(-let (((&plist :todo o :sched s) d)) (-let (((&plist :todo o :sched s) d))
(cond (cond
((equal o org-x-kw-todo) (->> (if s :proj-active ((equal o org-x-kw-todo) (if s (new-active-proj cs)
:proj-stuck) (new-proj :proj-stuck)))
(new-proj))) ((equal o org-x-kw-next) (new-active-proj cs))
((equal o org-x-kw-next) (new-proj :proj-active))
((equal o org-x-kw-wait) (new-proj :proj-wait)) ((equal o org-x-kw-wait) (new-proj :proj-wait))
((equal o org-x-kw-hold) (new-proj :proj-held)) ((equal o org-x-kw-hold) (new-proj :proj-held))
(t (org-x-dag-bs-error-kw "Task action" o))))) (t (org-x-dag-bs-error-kw "Task action" o)))))
@ -906,19 +933,17 @@ deadline (eg via epoch time) or if it has a repeater."
(-when-let (p (alist-get org-x-prop-parent-type props nil nil #'equal)) (-when-let (p (alist-get org-x-prop-parent-type props nil nil #'equal))
(equal p org-x-prop-parent-type-iterator)))) (equal p org-x-prop-parent-type-iterator))))
;; TODO these next two could be made more efficient by cutting out the
;; earlystop form and returning error in the rank form (the trans form is
;; still needed in case there is only one child)
(defun org-x-dag-bs-action-subiter-complete-fold (child-bss comptime type-name (defun org-x-dag-bs-action-subiter-complete-fold (child-bss comptime type-name
comp-key) success-fun
(declare (indent 2)) childless-fun)
(declare (indent 3))
(org-x-dag-bs-action-check-children child-bss (org-x-dag-bs-action-check-children child-bss
(org-x-dag-left "Completed %s cannot have active children" type-name) (org-x-dag-left "Completed %s cannot have active children" type-name)
(either :right `(,comp-key ,comptime)) (either :right (funcall success-fun comptime))
`(,comp-key ,comptime) (funcall childless-fun comptime)
(lambda (local) (lambda (local)
(pcase local (pcase local
(`(:si-complete ,_) t) ((or `(:si-task :task-complete ,_) `(:si-proj :proj-complete ,_)) t)
(_ nil))))) (_ nil)))))
(defun org-x-dag-bs-action-subiter-todo-fold (child-bss default trans-fun) (defun org-x-dag-bs-action-subiter-todo-fold (child-bss default trans-fun)
@ -926,7 +951,8 @@ deadline (eg via epoch time) or if it has a repeater."
(org-x-dag-bs-action-rankfold-children child-bss default (org-x-dag-bs-action-rankfold-children child-bss default
(lambda (acc next) (lambda (acc next)
(pcase `(,acc ,next) (pcase `(,acc ,next)
(`((:si-active ,a) (:si-active ,b)) ;; for active tasks, the furthest in the future is ranked the highest
(`((:si-task :task-active ,a) (:si-task :task-active ,b))
(-let (((&plist :sched as :dead ad) a) (-let (((&plist :sched as :dead ad) a)
((&plist :sched bs :dead bd) b)) ((&plist :sched bs :dead bd) b))
(cond (cond
@ -949,12 +975,22 @@ deadline (eg via epoch time) or if it has a repeater."
(->> (org-x-dag-datetime< (org-ml-timestamp-get-start-time as) (->> (org-x-dag-datetime< (org-ml-timestamp-get-start-time as)
(org-ml-timestamp-get-start-time bs)) (org-ml-timestamp-get-start-time bs))
(either :right)))))) (either :right))))))
(`((:si-active ,_) ,_) (either :right nil)) ((or `((:si-task . ,_) (:si-proj . ,_))
(`(,_ (:si-active ,_)) (either :right t)) `((:si-proj . ,_) (:si-task . ,_)))
(either :left "Sub-iterators must have same project structure"))
(`(,(or `(:si-task :task-active ,_) `(:si-proj :proj-active ,_)) ,_)
(either :right nil))
(`(,_ ,(or `(:si-task :task-active ,_) `(:si-proj :proj-active ,_)))
(either :right t))
(`(,_ ,_) (either :right nil)))) (`(,_ ,_) (either :right nil))))
(lambda (next) (lambda (next)
(pcase next (pcase next
(`(:si-active ,_) t) ((or `(:si-task :task-active ,_) `(:si-proj :proj-active ,_)) t)
(_ nil)))
(lambda (next)
(pcase next
(`(:si-proj :proj-active ,d) (plist-get d :child-scheds))
(`(:si-task :task-active ,d) (list (plist-get d :sched)))
(_ nil))) (_ nil)))
trans-fun)) trans-fun))
@ -962,53 +998,84 @@ deadline (eg via epoch time) or if it has a repeater."
(org-x-dag-node-data-is-iterator-p (plist-get node :node-meta))) (org-x-dag-node-data-is-iterator-p (plist-get node :node-meta)))
(defun org-x-dag-bs-action-subiter-inner (node-data ancestry child-bss) (defun org-x-dag-bs-action-subiter-inner (node-data ancestry child-bss)
(cl-flet
((new-active-proj
(d s cs)
(->> (list :dead d :child-scheds cs :leading-sched s)
(list :si-proj :proj-active)
(either :right))))
(org-x-dag-bs-action-with-closed node-data ancestry "sub-iterators" (org-x-dag-bs-action-with-closed node-data ancestry "sub-iterators"
`(:si-complete ,it-comptime) (if child-bss
`(:si-proj :proj-complete ,it-comptime)
`(:si-task :task-complete ,it-comptime))
(org-x-dag-bs-action-subiter-complete-fold child-bss it-comptime (org-x-dag-bs-action-subiter-complete-fold child-bss it-comptime
"sub-iterators" :si-complete) "sub-iterators"
(lambda (c) `(:si-proj :proj-complete ,c))
(lambda (c) `(:si-task :task-complete ,c)))
(-let (((sched dead) (-some->> it-planning (-let (((sched dead) (-some->> it-planning
(org-ml-get-properties '(:scheduled :deadline))))) (org-ml-get-properties '(:scheduled :deadline)))))
(cond (cond
((and sched child-bss) ((and sched child-bss)
(either :left "Sub-iterators with children cannot be scheduled")) (either :left "Project sub-iterators cannot be scheduled"))
((and dead child-bss) ((and dead child-bss)
(either :left "Sub-iterators with children cannot be deadlined")) (either :left "Project sub-iterators cannot be deadlined"))
((org-x-dag-node-data-is-iterator-p node-data) ((org-x-dag-node-data-is-iterator-p node-data)
(either :left "Iterators cannot be nested")) (either :left "Iterators cannot be nested"))
((org-x-dag-action-dead-after-parent-p ancestry dead) ((org-x-dag-action-dead-after-parent-p ancestry dead)
(either :left "Sub-iterator deadline must not start after parent")) (either :left "Sub-iterator deadline must not start after parent"))
((equal it-todo org-x-kw-todo) ((equal it-todo org-x-kw-todo)
(org-x-dag-bs-action-subiter-todo-fold child-bss (org-x-dag-bs-action-subiter-todo-fold child-bss
`(:si-active (:sched ,sched :dead ,dead)) `(:si-task :task-active (:sched ,sched :dead ,dead))
(lambda (acc) (lambda (acc cs)
(pcase acc (pcase acc
(`(:si-complete ,_) ((or `(:si-proj :proj-complete ,_)
(org-x-dag-left "Active sub-iterator must have at least one active child")) `(:si-task :task-complete ,_))
(`(:si-active ,ts-data) (-> "Active sub-iterator must have at least one active child"
(either :right `(:si-active ,ts-data))) (org-x-dag-left)))
(`(:si-proj :proj-active ,ts-data)
(-let (((&plist :dead d :leading-sched s) ts-data))
(new-active-proj d s cs)))
(`(:si-task :task-active ,ts-data)
(-let (((&plist :dead d :sched s) ts-data))
(new-active-proj d s cs)))
(e (error "Invalid pattern: %s" e)))))) (e (error "Invalid pattern: %s" e))))))
(t (t
(org-x-dag-bs-error-kw "Sub-iterator" it-todo)))))) (org-x-dag-bs-error-kw "Sub-iterator" it-todo)))))))
(defun org-x-dag-bs-action-iter-inner (node-data ancestry child-bss) (defun org-x-dag-bs-action-iter-inner (node-data ancestry child-bss)
(cl-flet
((new-active-iter
(d s cs)
(->> (list :dead d :child-scheds cs :leading-sched s)
(list :iter-nonempty :nonempty-active)
(either :right))))
(org-x-dag-bs-action-with-closed node-data ancestry "iterators" (org-x-dag-bs-action-with-closed node-data ancestry "iterators"
`(:iter-complete ,it-comptime) `(:iter-empty :empty-complete ,it-comptime)
(org-x-dag-bs-action-subiter-complete-fold child-bss it-comptime (org-x-dag-bs-action-subiter-complete-fold child-bss it-comptime "iterators"
"iterators" :iter-complete) (lambda (c) `(:iter-nonempty :nonempty-complete ,c))
(lambda (c) `(:iter-empty :empty-complete ,c)))
(cond (cond
(it-planning (it-planning
(either :left "Iterators cannot be scheduled or deadlined")) (either :left "Iterators cannot be scheduled or deadlined"))
;; TODO also check for timeshift and archive props ;; TODO also check for timeshift and archive props
((equal it-todo org-x-kw-todo) ((equal it-todo org-x-kw-todo)
(org-x-dag-bs-action-subiter-todo-fold child-bss '(:iter-empty) (org-x-dag-bs-action-subiter-todo-fold child-bss '(:iter-empty :empty-active)
(lambda (acc) (lambda (acc cs)
(pcase acc (pcase acc
(`(:si-complete ,_) (either :right '(:iter-empty))) ((or `(:si-task :task-complete ,_)
(`(:si-active ,ts-data) `(:si-proj :proj-complete ,_))
(either :right `(:iter-active ,ts-data))) (either :right '(:iter-nonempty :nonempty-complete)))
(`(:si-task :task-active ,ts-data)
(-let (((&plist :dead d :sched s) ts-data))
(new-active-iter d s cs)))
(`(:si-proj :proj-active ,ts-data)
(-let (((&plist :dead d :leading-sched s) ts-data))
(new-active-iter d s cs)))
(e (error "Invalid pattern: %s" e)))))) (e (error "Invalid pattern: %s" e))))))
(t (t
(org-x-dag-bs-error-kw "Iterator" it-todo))))) (org-x-dag-bs-error-kw "Iterator" it-todo))))))
(defun org-x-dag-bs-epg-inner (node ancestry child-bss) (defun org-x-dag-bs-epg-inner (node ancestry child-bss)
(let ((is-complete (let ((is-complete
@ -1241,7 +1308,7 @@ deadline (eg via epoch time) or if it has a repeater."
(mk-right dead) (mk-right dead)
(->> "QTP deadlines must be due after the quarter starts" (->> "QTP deadlines must be due after the quarter starts"
(either :left)))) (either :left))))
(mk-right nil date-abs))) (mk-right nil)))
(t (t
(org-x-dag-bs-error-kw "QTP" it-todo))))))) (org-x-dag-bs-error-kw "QTP" it-todo)))))))
@ -1461,9 +1528,24 @@ deadline (eg via epoch time) or if it has a repeater."
(-some->> (org-x-dag-adjlist-id-hl-meta-prop adjlist :planning id) (-some->> (org-x-dag-adjlist-id-hl-meta-prop adjlist :planning id)
(org-ml-get-property which))) (org-ml-get-property which)))
(defun org-x-dag-adjlist-id-planning-datetime (adjlist which id) ;; (defun org-x-dag-adjlist-id-planning-datetime (adjlist which id)
(-some->> (org-x-dag-adjlist-id-planning adjlist which id) ;; (-some->> (org-x-dag-adjlist-id-planning adjlist which id)
(org-ml-timestamp-get-start-time))) ;; (org-ml-timestamp-get-start-time)))
(defun org-x-dag-adjlist-id-all-sched (adjlist id)
(-when-let (bs (-> (org-x-dag-adjlist-id-bs adjlist id)
(either-from-right nil)))
(pcase bs
(`(:sp-task :task-active ,d)
(-some-> (plist-get d :sched) (list)))
(`(:sp-subiter :si-task :task-active ,d)
(-some-> (plist-get d :sched) (list)))
(`(:sp-proj :proj-active ,d)
(plist-get d :child-scheds))
(`(:sp-subiter :si-proj :proj-active ,d)
(plist-get d :child-scheds))
(`(:sp-iter :iter-nonempty :nonempty-active ,d)
(plist-get d :child-scheds)))))
(defun org-x-dag-adjlist-id-todo (adjlist id) (defun org-x-dag-adjlist-id-todo (adjlist id)
(org-x-dag-adjlist-id-hl-meta-prop adjlist :todo id)) (org-x-dag-adjlist-id-hl-meta-prop adjlist :todo id))
@ -1677,8 +1759,8 @@ denoted by CUR-KEY with any errors that are found."
(put-scheduled-action-maybe (put-scheduled-action-maybe
(lambda (id committed-ids) (lambda (id committed-ids)
;; TODO what about repeaters? ;; TODO what about repeaters?
(-when-let (sched (org-x-dag-adjlist-id-planning-datetime ;; TODO check these to see if they are in the planning period
adjlist :scheduled id)) (-when-let (scheds (org-x-dag-adjlist-id-all-sched adjlist id))
(when (and (not (org-x-dag-adjlist-id-done-p adjlist id)) (when (and (not (org-x-dag-adjlist-id-done-p adjlist id))
committed-ids) committed-ids)
(->> q-committed (->> q-committed
@ -2502,12 +2584,13 @@ Return value is a list like (BUFFER NON-BUFFER)."
"Return t if ID has no buffer children." "Return t if ID has no buffer children."
(not (org-x-dag-id->buffer-children id))) (not (org-x-dag-id->buffer-children id)))
(defun org-x-dag-id->is-active-iterator-child-p (id) (defun org-x-dag-id->is-active-toplevel-iterator-child-p (id)
(-> (org-x-dag-id->buffer-parent id) (-when-let (parent (org-x-dag-id->buffer-parent id))
(org-x-dag-id->bs) (-when-let (parent-bs (-> (org-x-dag-id->bs parent)
(either-from-right nil) (either-from-right nil)))
(cadr) (pcase (plist-get (cdr parent-bs) :local)
(eq :iter-active))) (`(:sp-iter :iter-nonempty :nonempty-active ,_)
(org-x-dag-id->is-toplevel-p parent))))))
(defun org-x-dag-id->has-node-property-p (prop value id) (defun org-x-dag-id->has-node-property-p (prop value id)
(->> (alist-get prop (org-x-dag-id->node-properties id) nil nil #'equal) (->> (alist-get prop (org-x-dag-id->node-properties id) nil nil #'equal)
@ -3041,9 +3124,10 @@ FUTURE-LIMIT in a list."
((get-status ((get-status
(data) (data)
(pcase data (pcase data
(`(:iter-empty) :empty) (`(:iter-empty :empty-complete ,_) :complete)
(`(:iter-active ,data) (`(:iter-empty :empty-active ,_) :empty)
(-let* (((&plist :dead d :sched s) data) (`(:iter-nonempty :nonempty-active ,data)
(-let* (((&plist :dead d :leading-sched s) data)
(d* (-some->> d (org-x-dag-timestamp-to-epoch))) (d* (-some->> d (org-x-dag-timestamp-to-epoch)))
(s* (-some->> s (org-x-dag-timestamp-to-epoch)))) (s* (-some->> s (org-x-dag-timestamp-to-epoch))))
(-if-let (epoch (if (and d* s*) (min d* s*) (or s* d*))) (-if-let (epoch (if (and d* s*) (min d* s*) (or s* d*)))
@ -3052,7 +3136,7 @@ FUTURE-LIMIT in a list."
:active :active
:refill) :refill)
:unknown))) :unknown)))
(`(:iter-complete ,_) :complete)))) (`(:iter-nonempty :nonempty-complete ,_) :complete))))
(org-x-dag-with-unmasked-action-ids files (org-x-dag-with-unmasked-action-ids files
(pcase it-local (pcase it-local
(`(:sp-iter . ,status-data) (`(:sp-iter . ,status-data)
@ -3068,8 +3152,10 @@ FUTURE-LIMIT in a list."
(-when-let (type (pcase it-local (-when-let (type (pcase it-local
(`(:sp-proj :proj-complete ,_) nil) (`(:sp-proj :proj-complete ,_) nil)
(`(:sp-task :task-complete ,_) nil) (`(:sp-task :task-complete ,_) nil)
(`(:sp-iter :iter-complete ,_) nil) (`(:sp-iter :iter-empty :empty-complete ,_) nil)
(`(:sp-subiter :si-complete ,_) nil) (`(:sp-iter :iter-nonempty :nonempty-complete ,_) nil)
(`(:sp-subiter :si-proj :proj-complete ,_) nil)
(`(:sp-subiter :si-task :task-complete ,_) nil)
(`(:sp-proj . ,_) :proj) (`(:sp-proj . ,_) :proj)
(`(:sp-task . ,_ ) :task) (`(:sp-task . ,_ ) :task)
(`(:sp-iter . ,_) :iter) (`(:sp-iter . ,_) :iter)
@ -3214,25 +3300,33 @@ FUTURE-LIMIT in a list."
(defun org-x-dag-itemize-archived (files) (defun org-x-dag-itemize-archived (files)
(org-x-dag-with-unmasked-action-ids files (org-x-dag-with-unmasked-action-ids files
(-let (((comptime type) (-when-let (r (pcase it-local
(pcase it-local (`(:sp-proj :proj-complete ,c)
(`(:sp-proj :proj-complete ,c) `(,c :proj)) (when (org-x-dag-id->is-toplevel-p it)
(`(:sp-task :task-complete ,c) `(,c :task)) `(,c :proj)))
(`(:sp-iter :iter-complete ,c) `(,c :iter)) (`(:sp-task :task-complete ,c)
(`(:sp-subiter :si-complete ,c) `(,c :subiter))))) (when (org-x-dag-id->is-toplevel-p it)
(when (and comptime `(,c :task)))
(or (and (memq type '(:proj :task)) (`(:sp-iter :iter-empty :empty-complete ,c)
(org-x-dag-id->is-toplevel-p it)) (when (org-x-dag-id->is-toplevel-p it)
(eq type :iter) `(,c :iter-empty)))
(and (eq type :subiter) (`(:sp-iter :iter-nonempty :nonempty-complete ,c)
(org-x-dag-id->is-active-iterator-child-p it)))) (when (org-x-dag-id->is-toplevel-p it)
(-let ((epoch (plist-get comptime :epoch))) `(,c :iter-nonempty)))
(`(:sp-subiter :si-proj :proj-complete ,c)
(when (org-x-dag-id->is-active-toplevel-iterator-child-p it)
`(,c :subiter-proj)))
(`(:sp-subiter :si-task :task-complete ,c)
(when (org-x-dag-id->is-active-toplevel-iterator-child-p it)
`(,c :subiter-task)))))
(-let* (((comptime type) r)
(epoch (plist-get comptime :epoch)))
(when (org-x-dag-time-is-archivable-p epoch) (when (org-x-dag-time-is-archivable-p epoch)
(let ((tags (org-x-dag-id->tags it))) (let ((tags (org-x-dag-id->tags it)))
(-> (org-x-dag-format-tag-node tags it) (-> (org-x-dag-format-tag-node tags it)
(org-add-props nil (org-add-props nil
'x-type type) 'x-type type)
(list))))))))) (list))))))))
(defun org-x-dag-itemize-errors (files) (defun org-x-dag-itemize-errors (files)
(cl-flet (cl-flet
@ -3349,9 +3443,9 @@ FUTURE-LIMIT in a list."
(ss (scheduled-datetimes id donep))) (ss (scheduled-datetimes id donep)))
`(,acc-d (,@ss ,@acc-s)))) `(,acc-d (,@ss ,@acc-s))))
(add-dead (add-dead
(acc id donep) (acc id)
(-let (((acc-d acc-s) acc) (-let (((acc-d acc-s) acc)
(ds (deadlined-datetimes id donep))) (ds (deadlined-datetimes id nil)))
`((,@ds ,@acc-d) ,acc-s))) `((,@ds ,@acc-d) ,acc-s)))
(add-dead-sched (add-dead-sched
(acc id donep) (acc id donep)
@ -3376,18 +3470,17 @@ FUTURE-LIMIT in a list."
(plist-get a :held-parent-p)) (plist-get a :held-parent-p))
acc acc
(pcase l (pcase l
(`(:sp-proj ,(or :proj-active ((or `(:sp-proj :proj-active ,_)
:proj-wait `(:sp-subiter :si-proj :proj-active ,_)
`(:sp-proj ,(or :proj-wait
:proj-held :proj-held
:proj-stuck)) :proj-stuck)))
(add-dead acc id nil)) (add-dead acc id))
(`(:sp-task :task-active ,_) ((or `(:sp-task :task-active ,_)
`(:sp-subiter :si-task :task-active ,_))
(add-dead-sched acc id nil)) (add-dead-sched acc id nil))
(`(:sp-task :task-complete ,_) ((or `(:sp-task :task-complete ,_)
(add-dead-sched acc id t)) `(:sp-subiter :si-task :task-complete ,_))
(`(:sp-subiter :si-active ,_)
(add-dead-sched acc id nil))
(`(:sp-subiter :si-complete ,_)
(add-dead-sched acc id t)) (add-dead-sched acc id t))
(_ acc))))) (_ acc)))))
(_ acc))) (_ acc)))
@ -4487,14 +4580,12 @@ FUTURE-LIMIT in a list."
(-let* (((&plist :epoch e :canceledp c) comptime) (-let* (((&plist :epoch e :canceledp c) comptime)
((y m d H M) (org-ml-unixtime-to-time-long e)) ((y m d H M) (org-ml-unixtime-to-time-long e))
(verb (if c "Canceled" "Completed"))) (verb (if c "Canceled" "Completed")))
(format-event verb what y m d H M)))) (format-event verb what y m d H M)))
;; TODO this could show more detail if I wanted (format-action-local-status
(let ((ls (pcase bs-data (local)
(`(:action . ,d) ;; TODO eventually show nested scheduled timestamps
(-let* (((&plist :ancestry a :local l) d) (pcase local
(local-status (`(:sp-proj :proj-active ,_)
(pcase l
(`(:sp-proj :proj-active)
"Active Project") "Active Project")
(`(:sp-proj :proj-wait) (`(:sp-proj :proj-wait)
"Waiting Project") "Waiting Project")
@ -4508,17 +4599,28 @@ FUTURE-LIMIT in a list."
(format-comptime "task" comptime)) (format-comptime "task" comptime))
(`(:sp-task :task-active ,_) (`(:sp-task :task-active ,_)
"Active Task") "Active Task")
(`(:sp-iter :iter-active ,_) (`(:sp-iter :iter-empty :empty-complete ,comptime)
"Active Iterator") (format-comptime "empty iterator" comptime))
(`(:sp-iter :iter-empty) (`(:sp-iter :iter-empty :empty-active)
"Empty Iterator") "Empty and active Iterator")
(`(:sp-iter :iter-complete ,comptime) (`(:sp-iter :iter-nonempty :nonempty-complete ,comptime)
(format-comptime "iterator" comptime)) (format-comptime "nonempty iterator" comptime))
(`(:sp-subiter :si-active ,_) (`(:sp-iter :iter-nonempty :nonempty-active ,_)
"Active sub-iterator") "Nonempty and active iterator")
(`(:sp-subiter :si-complete ,comptime) (`(:sp-subiter :si-proj :proj-complete ,comptime)
(format-comptime "sub-iterator" comptime)) (format-comptime "sub-iterator project" comptime))
(e (error "Unmatched pattern: %s" e)))) (`(:sp-subiter :si-task :task-complete ,comptime)
(format-comptime "sub-iterator task" comptime))
(`(:sp-subiter :si-proj :proj-active ,_)
"Active sub-iterator project")
(`(:sp-subiter :si-task :task-active ,_)
"Active sub-iterator task")
(e (error "Unmatched pattern: %s" e)))))
;; TODO this could show more detail if I wanted
(let ((ls (pcase bs-data
(`(:action . ,d)
(-let* (((&plist :ancestry a :local l) d)
(local-status (format-action-local-status l))
((&plist :canceled-parent-p c :held-parent-p h) a) ((&plist :canceled-parent-p c :held-parent-p h) a)
(ancestry-status (cond (ancestry-status (cond
((and c h) "Held/Canceled") ((and c h) "Held/Canceled")
@ -5078,7 +5180,7 @@ review phase)"
(let ((s (get-text-property 1 'x-status line))) (let ((s (get-text-property 1 'x-status line)))
(pcase s (pcase s
(:unknown "0. Unknown") (:unknown "0. Unknown")
(:complete "1. Refill") (:complete "1. Complete")
(:empty "2. Empty") (:empty "2. Empty")
(:refill "3. Refill") (:refill "3. Refill")
(:active "4. Active"))))))))))) (:active "4. Active")))))))))))
@ -5110,8 +5212,10 @@ review phase)"
(cl-case (get-text-property 1 'x-type line) (cl-case (get-text-property 1 'x-type line)
(:proj "Toplevel Projects") (:proj "Toplevel Projects")
(:task "Standalone Tasks") (:task "Standalone Tasks")
(:iter "Closed Iterators") (:iter-empty "Closed Empty Iterators")
(:subiter "Toplevel Subiterators")))))))))) (:iter-nonempty "Closed Active Iterators")
(:subiter-proj "Toplevel Subiterator Projects")
(:subiter-task "Toplevel Subiterator Tasks"))))))))))
;; ;; TODO the tags in the far column are redundant ;; ;; TODO the tags in the far column are redundant
;; (defun org-x-dag-agenda-quarterly-plan () ;; (defun org-x-dag-agenda-quarterly-plan ()

View File

@ -1,4 +1,4 @@
(("ESS" . "39eba283000a7b0220303d7c5a4f3ee05efc1e9c") (("ESS" . "e83ac622fe7e3cbfc848481a9257e5ed5c7b5afb")
("Highlight-Indentation-for-Emacs" . "d88db4248882da2d4316e76ed673b4ac1fa99ce3") ("Highlight-Indentation-for-Emacs" . "d88db4248882da2d4316e76ed673b4ac1fa99ce3")
("ace-window" . "0577c426a9833ab107bab46c60d1885c611b2fb9") ("ace-window" . "0577c426a9833ab107bab46c60d1885c611b2fb9")
("anaconda-mode" . "cbea0fb3182321d34ff93981c5a59f8dd72d82a5") ("anaconda-mode" . "cbea0fb3182321d34ff93981c5a59f8dd72d82a5")
@ -8,9 +8,9 @@
("avy" . "ba5f035be33693d1a136a5cbeedb24327f551a92") ("avy" . "ba5f035be33693d1a136a5cbeedb24327f551a92")
("beacon" . "bde78180c678b233c94321394f46a81dc6dce1da") ("beacon" . "bde78180c678b233c94321394f46a81dc6dce1da")
("biblio.el" . "517ec18f00f91b61481214b178f7ae0b8fbc499b") ("biblio.el" . "517ec18f00f91b61481214b178f7ae0b8fbc499b")
("blacken" . "563c744f545552cb92e8e84d5be4e2cdbabc93ca") ("blacken" . "764912ada13c3bf57e770fcd978c81a1ce26666a")
("c-eldoc" . "f4ede1f37f6de583376669735326367d84a0a917") ("c-eldoc" . "f4ede1f37f6de583376669735326367d84a0a917")
("cider" . "0d2ba20c029b12582e5fa318f046f2feddc1b270") ("cider" . "df34f141f32739e3c5657fb85ad6ff23520d44bf")
("citeproc-el" . "ba49516265fa24b138346c4918d39d19b4de8a62") ("citeproc-el" . "ba49516265fa24b138346c4918d39d19b4de8a62")
("clang-format" . "e48ff8ae18dc7ab6118c1f6752deb48cb1fc83ac") ("clang-format" . "e48ff8ae18dc7ab6118c1f6752deb48cb1fc83ac")
("clojure-mode" . "b6f41d74904daa9312648f3a7bea7a72fd8e140b") ("clojure-mode" . "b6f41d74904daa9312648f3a7bea7a72fd8e140b")
@ -20,45 +20,45 @@
("company-irony" . "b44711dfce445610c1ffaec4951c6ff3882b216a") ("company-irony" . "b44711dfce445610c1ffaec4951c6ff3882b216a")
("company-math" . "45778f5731c97a21a83e3b965cbde42018709afd") ("company-math" . "45778f5731c97a21a83e3b965cbde42018709afd")
("company-mode" . "d5145006b948f93e673f439a766da01f636d39fc") ("company-mode" . "d5145006b948f93e673f439a766da01f636d39fc")
("compat" . "1753ad6043a826ad7639dc99f3dd47ba59b6be79") ("compat" . "81378ce2549e6c6df5141d459036438cb98b9ad3")
("conda.el" . "7a34e06931515d46f9e22154762e06e66cfbc81c") ("conda.el" . "7a34e06931515d46f9e22154762e06e66cfbc81c")
("csv-mode" . "53beddc207864b0c3f81da85b59245dff8eea5ce") ("csv-mode" . "53beddc207864b0c3f81da85b59245dff8eea5ce")
("dash.el" . "759682332a0ebd737802d9fa0a80ceedf05088b6") ("dash.el" . "f9e6602ac9966b74a5ba6e3d332535543c84f4d5")
("delight" . "70cb8cec9e5eb2c24364e065d85c2ea8f14a587c") ("delight" . "70cb8cec9e5eb2c24364e065d85c2ea8f14a587c")
("dired-du" . "4ce114a0195b852022a81b05f0c8e0cbbc1ed013") ("dired-du" . "4ce114a0195b852022a81b05f0c8e0cbbc1ed013")
("dired-hacks" . "7c0ef09d57a80068a11edc74c3568e5ead5cc15a") ("dired-hacks" . "7c0ef09d57a80068a11edc74c3568e5ead5cc15a")
("dockerfile-mode" . "b63a3d12b7dea0cb9efc7f78d7ad5672ceab2a3f") ("dockerfile-mode" . "b63a3d12b7dea0cb9efc7f78d7ad5672ceab2a3f")
("ebib" . "0e243a78f435038dda31953c5b48cbddf2a89e27") ("ebib" . "0e243a78f435038dda31953c5b48cbddf2a89e27")
("el-get" . "91352ca0f895d099f608644c8e9ad8e844b5c520") ("el-get" . "bf3dba444dcd240b8cb358a0850c8c5a92606134")
("elpy" . "1746e7009000b7635c0ea6f1559018143aa61642") ("elpy" . "1746e7009000b7635c0ea6f1559018143aa61642")
("emacs-async" . "c78bab7506a70a735d2c3deab13fa87bf44a83d3") ("emacs-async" . "c78bab7506a70a735d2c3deab13fa87bf44a83d3")
("emacs-buttercup" . "ceedad5efa797e860dbb356bc2c3028a4e0321ec") ("emacs-buttercup" . "ceedad5efa797e860dbb356bc2c3028a4e0321ec")
("emacs-calfw" . "03abce97620a4a7f7ec5f911e669da9031ab9088") ("emacs-calfw" . "03abce97620a4a7f7ec5f911e669da9031ab9088")
("emacs-dashboard" . "a4eb09778f7b685b6ff652212bf1fa2e6e1305d7") ("emacs-dashboard" . "34d1f97200055e6b521c131270d8322efc6c52be")
("emacs-format-all-the-code" . "828280eaf3b46112e17746a7d03235570a633425") ("emacs-format-all-the-code" . "828280eaf3b46112e17746a7d03235570a633425")
("emacs-htmlize" . "dd27bc3f26efd728f2b1f01f9e4ac4f61f2ffbf9") ("emacs-htmlize" . "dd27bc3f26efd728f2b1f01f9e4ac4f61f2ffbf9")
("emacs-language-id" . "5325af36d9cd726de47a698ac159fce59f3fd6d9") ("emacs-language-id" . "5325af36d9cd726de47a698ac159fce59f3fd6d9")
("emacs-refactor" . "cac1b52932926f56d7f6d2923732d20bbd20670d") ("emacs-refactor" . "cac1b52932926f56d7f6d2923732d20bbd20670d")
("emacs-web-server" . "22ce66ea43e0eadb9ec1d691a35d9695fc29cee6") ("emacs-web-server" . "22ce66ea43e0eadb9ec1d691a35d9695fc29cee6")
("emacs-which-key" . "129f4ebfc74f207ac82978f6d90d8b4bb1a55cf9") ("emacs-which-key" . "1ab1d0cc88843c9a614ed3226c5a1070e32e4823")
("emacsmirror-mirror" . "378111b2b7846064679a063f4eec48ef6de39ce9") ("emacsmirror-mirror" . "2e1ceba3c8036637832e99414d9012359911f5e4")
("epl" . "78ab7a85c08222cd15582a298a364774e3282ce6") ("epl" . "78ab7a85c08222cd15582a298a364774e3282ce6")
("evil" . "5a9cfbc443219c4063b17853b7828ec0a00d2736") ("evil" . "157af04d2cf466e301e82b0e667c5e7203fd96a2")
("evil-ReplaceWithRegister" . "91cc7bf21a94703c441cc9212214075b226b7f67") ("evil-ReplaceWithRegister" . "91cc7bf21a94703c441cc9212214075b226b7f67")
("evil-collection" . "11cfad9b3c01feb7848f13d5c3f5cc1787ab6eb6") ("evil-collection" . "98d28bc67909225a4746c557449c9da816f5d0f5")
("evil-commentary" . "2dab6ac34d1617971768ad219d73af48f7473fec") ("evil-commentary" . "2dab6ac34d1617971768ad219d73af48f7473fec")
("evil-org-mode" . "0d10ff7bb9a3a93d25cd91018b17f0a052b335f3") ("evil-org-mode" . "0d10ff7bb9a3a93d25cd91018b17f0a052b335f3")
("evil-surround" . "c9e1449bf3f740b5e9b99e7820df4eca7fc7cf02") ("evil-surround" . "c9e1449bf3f740b5e9b99e7820df4eca7fc7cf02")
("f.el" . "e0dc429f9c20322c7af735a828fe2404bb416715") ("f.el" . "bf586b80a5298df68a094f70bc1a1bd6f8e948df")
("fill-column-indicator" . "c35f9de072c241699b57bcb46da84bed5af29cfe") ("fill-column-indicator" . "c35f9de072c241699b57bcb46da84bed5af29cfe")
("flycheck" . "66a973afca1d03b8284baaa7590eb2b8615a1e6a") ("flycheck" . "66a973afca1d03b8284baaa7590eb2b8615a1e6a")
("flycheck-clang-analyzer" . "646d9f3a80046ab231a07526778695d5decad92d") ("flycheck-clang-analyzer" . "646d9f3a80046ab231a07526778695d5decad92d")
("flycheck-package" . "615c1ed8c6fb7c73abec6aaa73d3fef498d231bc") ("flycheck-package" . "615c1ed8c6fb7c73abec6aaa73d3fef498d231bc")
("flyspell-correct" . "e8027a412262bc04056a5b5440efdb7f370c3320") ("flyspell-correct" . "7d7b6b01188bd28e20a13736ac9f36c3367bd16e")
("gnu-elpa-mirror" . "a388b8aa566f391705cc43faa7678d7fffc95330") ("gnu-elpa-mirror" . "808923d95777d378ca340b8020dd571e6a62460a")
("goto-chg" . "278cd3e6d5107693aa2bb33189ca503f22f227d0") ("goto-chg" . "278cd3e6d5107693aa2bb33189ca503f22f227d0")
("graphviz-dot-mode" . "6e96a89762760935a7dff6b18393396f6498f976") ("graphviz-dot-mode" . "6e96a89762760935a7dff6b18393396f6498f976")
("haskell-mode" . "fe3a8046aa1e1767ddc11a74e3d45bd9c614e655") ("haskell-mode" . "5a9f8072c7b9168f0a8409adf9d62a3e4ad4ea3d")
("helm-bibtex" . "ce8c17690ddad73d01531084b282f221f8eb6669") ("helm-bibtex" . "ce8c17690ddad73d01531084b282f221f8eb6669")
("ht.el" . "c4c1be487d6ecb353d07881526db05d7fc90ea87") ("ht.el" . "c4c1be487d6ecb353d07881526db05d7fc90ea87")
("hydra" . "9e9e00cb240ea1903ffd36a54956b3902c379d29") ("hydra" . "9e9e00cb240ea1903ffd36a54956b3902c379d29")
@ -75,27 +75,28 @@
("lispy" . "df1b7e614fb0f73646755343e8892ddda310f427") ("lispy" . "df1b7e614fb0f73646755343e8892ddda310f427")
("list-utils" . "ca9654cd1418e874c876c6b3b7d4cd8339bfde77") ("list-utils" . "ca9654cd1418e874c876c6b3b7d4cd8339bfde77")
("lua-mode" . "5a9bee8d5fc978dc64fcb677167417010321ba65") ("lua-mode" . "5a9bee8d5fc978dc64fcb677167417010321ba65")
("magit" . "5a7519fd3d56522b1c6a1601a12ae0f4717c26a7") ("magit" . "9b48dd7e3618ac3736f66ef964ae5e1fedd54f98")
("map" . "9f46b9c966505874d68d9036827a4f63b55ab846") ("map" . "9f46b9c966505874d68d9036827a4f63b55ab846")
("markdown-mode" . "4477f381de0068a04b55e198c32614793f67b38a") ("markdown-mode" . "1f709778ac7990f4a07fdf11fe37bc6541810b29")
("math-symbol-lists" . "590d9f09f8ad9aab747b97f077396a2035dcf50f") ("math-symbol-lists" . "590d9f09f8ad9aab747b97f077396a2035dcf50f")
("melpa" . "1c858ee39e50876efc483881e6348597664adb7a") ("melpa" . "5be08102d4de84c35b18cd1e3321fe8b6836ff56")
("no-littering" . "fed46eb7060aca624bfe1a18f13b73f94e70f013") ("no-littering" . "a5aa3faada054f96b70b32ba9d9447f7a4cf403c")
("org-bullets" . "767f55feb58b840a5a04eabfc3fbbf0d257c4792") ("org-bullets" . "767f55feb58b840a5a04eabfc3fbbf0d257c4792")
("org-ml" . "3974435bbf72722801f7ed78855381d77a773162") ("org-ml" . "f191ebfee6dcf6a05b5d1db43cf75f4a20faa8b4")
("org-ref" . "0d2355d1eb4dcac1095a03d885788a12fe566610") ("org-ref" . "cbe9e870a5f488cdfc5e6a3b5478845ea8acdcde")
("org-sql" . "71b6e01ff94be4c68cfeb17a34518bf1f118cf95") ("org-sql" . "71b6e01ff94be4c68cfeb17a34518bf1f118cf95")
("org-super-agenda" . "3108bc3f725818f0e868520d2c243abe9acbef4e") ("org-super-agenda" . "3108bc3f725818f0e868520d2c243abe9acbef4e")
("origami.el" . "e558710a975e8511b9386edc81cd6bdd0a5bda74") ("origami.el" . "e558710a975e8511b9386edc81cd6bdd0a5bda74")
("outline-magic" . "2a5f07417b696cf7541d435c43bafcc64817636b") ("outline-magic" . "2a5f07417b696cf7541d435c43bafcc64817636b")
("package-lint" . "80a9d9815ab2919c992ad29ae4846443dec43a35") ("ox-pandoc" . "0a35d0fbfa56bdd9ec5ba5bac2fe002b61c05c52")
("package-lint" . "622a5a6e853e5a4c7f2b4c53e2ac0edde354b07c")
("paredit" . "8330a41e8188fe18d3fa805bb9aa529f015318e8") ("paredit" . "8330a41e8188fe18d3fa805bb9aa529f015318e8")
("parsebib" . "dd4c5540fa6c2cd990cba324741d7abbc8ed2f23") ("parsebib" . "dd4c5540fa6c2cd990cba324741d7abbc8ed2f23")
("parseclj" . "1ce54fa2eb7a5d99d34c07d271e18eaabd0489da") ("parseclj" . "1ce54fa2eb7a5d99d34c07d271e18eaabd0489da")
("parseedn" . "a67204eeaa32ca8f11f6aeecc2a88349f196add6") ("parseedn" . "a67204eeaa32ca8f11f6aeecc2a88349f196add6")
("password-store" . "c4d8a1d815e79ddd89a85d3e36a41d29f0475771") ("password-store" . "c4d8a1d815e79ddd89a85d3e36a41d29f0475771")
("pcre2el" . "0b5b2a2c173aab3fd14aac6cf5e90ad3bf58fa7d") ("pcre2el" . "0b5b2a2c173aab3fd14aac6cf5e90ad3bf58fa7d")
("pdf-tools" . "fedd930a09a497c03df3ce5204ccbd80da724662") ("pdf-tools" . "f9ccdf99e560bae70d3a13325cec9dc0e3cc45b0")
("php-mode" . "4503672471b8fdaaea6c454344817a119c87fcc6") ("php-mode" . "4503672471b8fdaaea6c454344817a119c87fcc6")
("pkg-info" . "76ba7415480687d05a4353b27fea2ae02b8d9d61") ("pkg-info" . "76ba7415480687d05a4353b27fea2ae02b8d9d61")
("pkgbuild-mode" . "8faee70e4640bd6ec1857651ec64e139e4dc2833") ("pkgbuild-mode" . "8faee70e4640bd6ec1857651ec64e139e4dc2833")
@ -103,9 +104,9 @@
("poly-markdown" . "d4ca396ec4a7d674ef0d671a6896f929ce5b504c") ("poly-markdown" . "d4ca396ec4a7d674ef0d671a6896f929ce5b504c")
("poly-noweb" . "3b0cd36ca9a707e8a09337a3468fa85d81fc461c") ("poly-noweb" . "3b0cd36ca9a707e8a09337a3468fa85d81fc461c")
("polymode" . "2094c92403fe395dfb2b8b2521da1012a966e9ab") ("polymode" . "2094c92403fe395dfb2b8b2521da1012a966e9ab")
("popup-el" . "114d646f0f4dd49de19dfedd78630018f71470e5") ("popup-el" . "976bd8e06100df5a266377d0e5f63b104ba93119")
("powerline" . "566c77844f053cb39fa7acdfbc143a855450f0b5") ("powerline" . "566c77844f053cb39fa7acdfbc143a855450f0b5")
("projectile" . "a4f86f981c84a546530d5904253fa266431ef806") ("projectile" . "e60883ff370c1545499b97cf56479de1a58c5b3b")
("pyenv-mode" . "b818901b8eac0e260ced66a6a5acabdbf6f5ba99") ("pyenv-mode" . "b818901b8eac0e260ced66a6a5acabdbf6f5ba99")
("pythonic" . "fe75bc17baae314bf8f5e0b12aad3fccfc6c5397") ("pythonic" . "fe75bc17baae314bf8f5e0b12aad3fccfc6c5397")
("pyvenv" . "31ea715f2164dd611e7fc77b26390ef3ca93509b") ("pyvenv" . "31ea715f2164dd611e7fc77b26390ef3ca93509b")
@ -121,14 +122,14 @@
("spaceline" . "9a81afa52738544ad5e8b71308a37422ca7e25ba") ("spaceline" . "9a81afa52738544ad5e8b71308a37422ca7e25ba")
("spacemacs-theme" . "bd376f705d6eb7afd9a1dfa0c1bd407e869d1e9f") ("spacemacs-theme" . "bd376f705d6eb7afd9a1dfa0c1bd407e869d1e9f")
("spinner" . "34905eae12a236753fa88abc831eff1e41e8576e") ("spinner" . "34905eae12a236753fa88abc831eff1e41e8576e")
("straight.el" . "af5437f2afd00936c883124d6d3098721c2d306c") ("straight.el" . "4517e118ee43f849f708025dbb2cf4f281793121")
("string-inflection" . "fd7926ac17293e9124b31f706a4e8f38f6a9b855") ("string-inflection" . "fd7926ac17293e9124b31f706a4e8f38f6a9b855")
("sudo-edit" . "23b78a39053088839f281bc0c3134203d7e04e50") ("sudo-edit" . "23b78a39053088839f281bc0c3134203d7e04e50")
("swiper" . "8bf8027e4bd8c093bddb76a813952d2a0dcbf21d") ("swiper" . "f8d80a4055514f92d94f128f5fcb1cda79e5cd22")
("systemd-mode" . "b6ae63a236605b1c5e1069f7d3afe06ae32a7bae") ("systemd-mode" . "b6ae63a236605b1c5e1069f7d3afe06ae32a7bae")
("tablist" . "faab7a035ef2258cc4ea2182f67e3aedab7e2af9") ("tablist" . "faab7a035ef2258cc4ea2182f67e3aedab7e2af9")
("toc-org" . "bf2e4b358efbd860ecafe6e74776de0885d9d100") ("toc-org" . "bf2e4b358efbd860ecafe6e74776de0885d9d100")
("transient" . "a0c69e5c712511a35d0ab53a5634420e9705149e") ("transient" . "2e4426fe8161893382f09b3f4635e152ee02488e")
("ts.el" . "3fee71ceefac71ba55eb34829d7e94bb3df37cee") ("ts.el" . "3fee71ceefac71ba55eb34829d7e94bb3df37cee")
("use-package" . "a7422fb8ab1baee19adb2717b5b47b9c3812a84c") ("use-package" . "a7422fb8ab1baee19adb2717b5b47b9c3812a84c")
("with-editor" . "4ab8c6148bb2698ff793d4a8acdbd8d0d642e133") ("with-editor" . "4ab8c6148bb2698ff793d4a8acdbd8d0d642e133")