ADD function to insert links to agenda items
This commit is contained in:
parent
e70488515b
commit
92505ac802
|
@ -674,6 +674,13 @@ property."
|
||||||
(org-x-headline-is-created-in-future)
|
(org-x-headline-is-created-in-future)
|
||||||
t)))
|
t)))
|
||||||
|
|
||||||
|
(defun org-x-headline-is-meeting-p ()
|
||||||
|
"Return t if current headline is a meeting."
|
||||||
|
(-when-let (keyword (org-x-headline-is-task-p))
|
||||||
|
(and (member keyword (cons org-x-kw-todo org-x-done-keywords))
|
||||||
|
(org-x-headline-has-tag-p org-x-tag-meeting)
|
||||||
|
t)))
|
||||||
|
|
||||||
(defun org-x-headline-is-open-meeting-p ()
|
(defun org-x-headline-is-open-meeting-p ()
|
||||||
"Return t if current headline is a meeting."
|
"Return t if current headline is a meeting."
|
||||||
(-when-let (keyword (org-x-headline-is-task-p))
|
(-when-let (keyword (org-x-headline-is-task-p))
|
||||||
|
@ -1142,6 +1149,55 @@ function will simply return the point of the next headline."
|
||||||
|
|
||||||
;;; INTERACTIVE BUFFER FUNCTIONS
|
;;; INTERACTIVE BUFFER FUNCTIONS
|
||||||
|
|
||||||
|
;; meeting
|
||||||
|
|
||||||
|
(defun org-x--is-drawer-with-name (name node)
|
||||||
|
"Return t is NODE is a drawer named NAME."
|
||||||
|
(and (org-ml-is-type 'drawer node)
|
||||||
|
(equal (org-ml-get-property :drawer-name node) name)))
|
||||||
|
|
||||||
|
(defun org-x-headline-meeting-add-agenda-item ()
|
||||||
|
"Add a linked headline to the agenda items of the current headline.
|
||||||
|
Only ID links are considered. Headline must be a meeting (tagged
|
||||||
|
with proper todo keywords)."
|
||||||
|
(interactive)
|
||||||
|
(if (not (org-x-headline-is-meeting-p))
|
||||||
|
(message "Not in a meeting headline")
|
||||||
|
(-if-let (id-alist (->> org-stored-links
|
||||||
|
(--map (cons (car it) (nth 1 it)))
|
||||||
|
(--filter (s-prefix-p "id:" (car it)))
|
||||||
|
(--map (cons (format "%s: %s" (cdr it) (car it))
|
||||||
|
(list (car it) (cdr it))))))
|
||||||
|
;; ASSUME this will never return nil due to required read
|
||||||
|
(-let* (((id desc) (-> (completing-read "Link: " id-alist nil t)
|
||||||
|
(alist-get id-alist nil nil #'equal)))
|
||||||
|
(item* (->> (org-ml-build-link id desc)
|
||||||
|
(org-ml-build-paragraph)
|
||||||
|
(org-ml-build-item :checkbox 'off))))
|
||||||
|
(org-ml-update-this-headline*
|
||||||
|
(org-ml-headline-map-contents* (org-x-logbook-config)
|
||||||
|
(-if-let (i (--find-index
|
||||||
|
(org-x--is-drawer-with-name "AGENDA_ITEMS" it)
|
||||||
|
it))
|
||||||
|
(let ((drawer* (org-ml-map-children*
|
||||||
|
(-let* (((all &as x . xs) it))
|
||||||
|
(if (org-ml-is-type 'plain-list x)
|
||||||
|
(cons (org-ml-map-children*
|
||||||
|
(-snoc it item*)
|
||||||
|
x)
|
||||||
|
xs)
|
||||||
|
all))
|
||||||
|
(nth i it))))
|
||||||
|
(-replace-at i drawer* it))
|
||||||
|
(let ((drawer* (->> (org-ml-build-plain-list item*)
|
||||||
|
(org-ml-build-drawer
|
||||||
|
:drawer-name "AGENDA_ITEMS"))))
|
||||||
|
(cons drawer* it)))
|
||||||
|
it))
|
||||||
|
(setq org-stored-links (delq (assoc id org-stored-links)
|
||||||
|
org-stored-links)))
|
||||||
|
(message "No stored IDs to insert"))))
|
||||||
|
|
||||||
;; timestamp shifting
|
;; timestamp shifting
|
||||||
|
|
||||||
(defun org-x--read-number-from-minibuffer (prompt &optional return-str)
|
(defun org-x--read-number-from-minibuffer (prompt &optional return-str)
|
||||||
|
|
Loading…
Reference in New Issue