From 2644648793317a4f915e2e672b4e74d5104fd383 Mon Sep 17 00:00:00 2001 From: Akira Komamura Date: Sat, 7 Sep 2019 00:08:43 +0900 Subject: [PATCH 1/2] Allow customizing the function for formatting entries in org-ql-agenda --- org-ql-agenda.el | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/org-ql-agenda.el b/org-ql-agenda.el index fa75f6d..dcedf2b 100644 --- a/org-ql-agenda.el +++ b/org-ql-agenda.el @@ -116,6 +116,17 @@ e.g. `org-ql-search' as desired." :type '(alist :key-type string :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 ;; TODO: DRY these two macros. @@ -520,7 +531,13 @@ return an empty string." (due-string (pcase (org-element-property :relative-due-date element) ('nil "") (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))))) + (string (funcall org-ql-agenda-format-function + `((todo . ,todo-keyword) + (priority . ,priority-string) + (title . ,title) + (due . ,due-string) + (tags . ,tag-string)) + element))) (remove-list-of-text-properties 0 (length string) '(line-prefix) string) ;; Add all the necessary properties and faces to the whole string (--> string @@ -531,6 +548,20 @@ return an empty string." 'tags tag-list '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) "Return ELEMENT with deadline and scheduled faces added." (->> element From 6ce24ada7e3034d2abd484a7a4ab557d71fe3219 Mon Sep 17 00:00:00 2001 From: Akira Komamura Date: Sat, 7 Sep 2019 00:29:06 +0900 Subject: [PATCH 2/2] Pass category to the formatter --- org-ql-agenda.el | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/org-ql-agenda.el b/org-ql-agenda.el index dcedf2b..ccba555 100644 --- a/org-ql-agenda.el +++ b/org-ql-agenda.el @@ -490,6 +490,8 @@ return an empty string." for symbol = (intern (cl-subseq (symbol-name key) 1)) unless (member symbol '(parent)) 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 ;; 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. @@ -505,8 +507,7 @@ return an empty string." ;; 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 ;; `org-element-headline-parser' parse inherited tags too? I forget...) - (if-let ((marker (or (org-element-property :org-hd-marker element) - (org-element-property :org-marker element)))) + (if marker (with-current-buffer (marker-buffer marker) ;; I wish `org-get-tags' used the correct buffer automatically. (org-get-tags marker (not org-use-tag-inheritance))) @@ -520,7 +521,6 @@ return an empty string." (s-join ":" it) (s-wrap it ":") (org-add-props it nil 'face 'org-tag)))) - ;; (category (org-element-property :category element)) (priority-string (-some->> (org-element-property :priority element) (char-to-string) (format "[#%s]") @@ -531,12 +531,16 @@ return an empty string." (due-string (pcase (org-element-property :relative-due-date element) ('nil "") (string (format " %s " (org-add-props string nil 'face 'org-ql-agenda-due-date))))) + (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)) + (tags . ,tag-string) + (category . ,category)) element))) (remove-list-of-text-properties 0 (length string) '(line-prefix) string) ;; Add all the necessary properties and faces to the whole string