This commit is contained in:
Akira Komamura 2019-09-19 12:52:40 +00:00 committed by GitHub
commit cdeb73c620
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -119,6 +119,17 @@ e.g. `org-ql-search' as desired."
:type '(alist :key-type string :type '(alist :key-type string
:value-type function)) :value-type function))
(defcustom org-ql-agenda-format-function
#'org-ql-agenda-default-format-function
"Function used to format entries in `org-ql-agenda-block'.
This function receives two arguments: a map-like data containing
strings which can be used for formatting agenda entries, and a plist
returned by `org-element-headline-parser'.
"
:group 'org-ql
:type 'function)
;;;; Macros ;;;; Macros
;; TODO: DRY these two macros. ;; TODO: DRY these two macros.
@ -524,6 +535,8 @@ return an empty string."
for symbol = (intern (cl-subseq (symbol-name key) 1)) for symbol = (intern (cl-subseq (symbol-name key) 1))
unless (member symbol '(parent)) unless (member symbol '(parent))
append (list symbol val))) append (list symbol val)))
(marker (or (org-element-property :org-hd-marker element)
(org-element-property :org-marker element)))
;; TODO: --add-faces is used to add the :relative-due-date property, but that fact is ;; TODO: --add-faces is used to add the :relative-due-date property, but that fact is
;; hidden by doing it through --add-faces (which calls --add-scheduled-face and ;; hidden by doing it through --add-faces (which calls --add-scheduled-face and
;; --add-deadline-face), and doing it in this form that gets the title hides it even more. ;; --add-deadline-face), and doing it in this form that gets the title hides it even more.
@ -539,8 +552,7 @@ return an empty string."
;; NOTE: Tag inheritance cannot be used here unless markers are added, otherwise ;; NOTE: Tag inheritance cannot be used here unless markers are added, otherwise
;; we can't go to the item's buffer to look for inherited tags. (Or does ;; we can't go to the item's buffer to look for inherited tags. (Or does
;; `org-element-headline-parser' parse inherited tags too? I forget...) ;; `org-element-headline-parser' parse inherited tags too? I forget...)
(if-let ((marker (or (org-element-property :org-hd-marker element) (if marker
(org-element-property :org-marker element))))
(with-current-buffer (marker-buffer marker) (with-current-buffer (marker-buffer marker)
;; I wish `org-get-tags' used the correct buffer automatically. ;; I wish `org-get-tags' used the correct buffer automatically.
(org-get-tags marker (not org-use-tag-inheritance))) (org-get-tags marker (not org-use-tag-inheritance)))
@ -554,7 +566,6 @@ return an empty string."
(s-join ":" it) (s-join ":" it)
(s-wrap it ":") (s-wrap it ":")
(org-add-props it nil 'face 'org-tag)))) (org-add-props it nil 'face 'org-tag))))
;; (category (org-element-property :category element))
(priority-string (-some->> (org-element-property :priority element) (priority-string (-some->> (org-element-property :priority element)
(char-to-string) (char-to-string)
(format "[#%s]") (format "[#%s]")
@ -565,7 +576,17 @@ return an empty string."
(due-string (pcase (org-element-property :relative-due-date element) (due-string (pcase (org-element-property :relative-due-date element)
('nil "") ('nil "")
(string (format " %s " (org-add-props string nil 'face 'org-ql-agenda-due-date))))) (string (format " %s " (org-add-props string nil 'face 'org-ql-agenda-due-date)))))
(string (s-join " " (-non-nil (list todo-keyword priority-string title due-string tag-string))))) (category (when marker
(with-current-buffer (marker-buffer marker)
(org-get-category marker))))
(string (funcall org-ql-agenda-format-function
`((todo . ,todo-keyword)
(priority . ,priority-string)
(title . ,title)
(due . ,due-string)
(tags . ,tag-string)
(category . ,category))
element)))
(remove-list-of-text-properties 0 (length string) '(line-prefix) string) (remove-list-of-text-properties 0 (length string) '(line-prefix) string)
;; Add all the necessary properties and faces to the whole string ;; Add all the necessary properties and faces to the whole string
(--> string (--> string
@ -576,6 +597,20 @@ return an empty string."
'tags tag-list 'tags tag-list
'org-habit-p habit-property))))) 'org-habit-p habit-property)))))
(defun org-ql-agenda-default-format-function (map _element)
"Default function used to format entries in org-ql-agenda.
MAP is a map-like data structure containing some information
commonly used for agenda entries, which can be accessed using
`map-elt' function from map.el.
This should be the default value for `org-ql-agenda-format-function'."
(s-join " " (-non-nil (list (map-elt map 'todo)
(map-elt map 'priority)
(map-elt map 'title)
(map-elt map 'due)
(map-elt map 'tags)))))
(defun org-ql-agenda--add-faces (element) (defun org-ql-agenda--add-faces (element)
"Return ELEMENT with deadline and scheduled faces added." "Return ELEMENT with deadline and scheduled faces added."
(->> element (->> element