ENH use lookup table to get title of headline

This commit is contained in:
Nathan Dwarshuis 2022-02-20 12:57:39 -05:00
parent 9d87f8e685
commit 99117cd9f2
1 changed files with 14 additions and 11 deletions

View File

@ -256,6 +256,10 @@ that file as it currently sits on disk.")
"Return todo keyword for ID." "Return todo keyword for ID."
(org-x-dag-id->metaprop id :todo)) (org-x-dag-id->metaprop id :todo))
(defun org-x-dag-id->title (id)
"Return title for ID."
(org-x-dag-id->metaprop id :title))
(defun org-x-dag-id->local-tags (id) (defun org-x-dag-id->local-tags (id)
"Return local tags for ID." "Return local tags for ID."
(org-x-dag-id->metaprop id :tags)) (org-x-dag-id->metaprop id :tags))
@ -292,11 +296,6 @@ that file as it currently sits on disk.")
(parent-tags (and inherit? (ascend id nil)))) (parent-tags (and inherit? (ascend id nil))))
(append local-tags parent-tags init)))) (append local-tags parent-tags init))))
(defun org-x-dag-id->title (id)
(org-x-dag-with-id-in-file id
(->> (org-get-heading t t t t)
(substring-no-properties))))
(defun org-x-dag-id->bucket (inherit? id) (defun org-x-dag-id->bucket (inherit? id)
(-some->> (org-x-dag-id->tags inherit? nil id) (-some->> (org-x-dag-id->tags inherit? nil id)
(--find (= (elt it 0) org-x-tag-category-prefix)) (--find (= (elt it 0) org-x-tag-category-prefix))
@ -305,7 +304,7 @@ that file as it currently sits on disk.")
(defun org-x-dag-id->link (id) (defun org-x-dag-id->link (id)
(org-x-dag-with-id-in-file id (org-x-dag-with-id-in-file id
(let ((desc (org-get-heading t t t t))) (let ((desc (org-x-dag-id->title id)))
(->> (org-ml-build-secondary-string! desc) (->> (org-ml-build-secondary-string! desc)
(apply #'org-ml-build-link id :type "id"))))) (apply #'org-ml-build-link id :type "id")))))
@ -931,7 +930,8 @@ valid keyword or none of its parents have valid keywords."
;; headline if the parent also has a keyword. ;; headline if the parent also has a keyword.
(setq this-point (car (match-data)) (setq this-point (car (match-data))
this-level (length (match-string 1)) this-level (length (match-string 1))
this-todo (match-string-no-properties 2) this-todo (match-string 2)
this-title (-if-let (s (match-string 3)) s "")
this-tags (-some-> (match-string-no-properties 4) this-tags (-some-> (match-string-no-properties 4)
(split-string ":" t)) (split-string ":" t))
this-key nil) this-key nil)
@ -960,7 +960,7 @@ valid keyword or none of its parents have valid keywords."
this-point this-point
this-level this-level
this-todo this-todo
(match-string-no-properties 3) this-title
all-tags all-tags
this-parent-key)) this-parent-key))
(!cons (cons this-key this-meta) acc-meta) (!cons (cons this-key this-meta) acc-meta)
@ -1262,7 +1262,10 @@ FUTURE-LIMIT in a list."
;; ASSUME I don't use subtree-level categories ;; ASSUME I don't use subtree-level categories
(-let* (;; (category (org-get-category)) (-let* (;; (category (org-get-category))
(tags* (org-x-dag-prepare-tags tags)) (tags* (org-x-dag-prepare-tags tags))
(head (org-get-heading)) (todo-state (org-x-dag-id->todo key))
;; TODO the only reason this format thing is here is to satisfy
;; `org-agenda-format-item' (which I should probably just rewrite)
(head (format "%s %s" todo-state (org-x-dag-id->title key)))
(level (org-x-dag-id->formatted-level key)) (level (org-x-dag-id->formatted-level key))
(marker (org-agenda-new-marker)) (marker (org-agenda-new-marker))
;; no idea what this function actually does ;; no idea what this function actually does
@ -1279,7 +1282,7 @@ FUTURE-LIMIT in a list."
'org-hd-marker marker 'org-hd-marker marker
'org-marker marker 'org-marker marker
;; headline stuff ;; headline stuff
'todo-state (org-x-dag-id->todo key) 'todo-state todo-state
'priority priority 'priority priority
'ts-date ts 'ts-date ts
;; misc ;; misc
@ -1287,9 +1290,9 @@ FUTURE-LIMIT in a list."
(defun org-x-dag-format-item (id extra category tags time) (defun org-x-dag-format-item (id extra category tags time)
(let* ((tags* (org-x-dag-prepare-tags tags)) (let* ((tags* (org-x-dag-prepare-tags tags))
(head (org-get-heading))
(level (org-x-dag-id->formatted-level id)) (level (org-x-dag-id->formatted-level id))
(todo-state (org-x-dag-id->todo id)) (todo-state (org-x-dag-id->todo id))
(head (format "%s %s" todo-state (org-x-dag-id->title id)))
(time-str (-some->> time (apply #'format "%02i:%02i "))) (time-str (-some->> time (apply #'format "%02i:%02i ")))
(item (org-agenda-format-item extra head level category tags* time-str)) (item (org-agenda-format-item extra head level category tags* time-str))
;; TODO why am I getting the priority after sending the headline ;; TODO why am I getting the priority after sending the headline