Make every part of the output configurable with user defined functions #5

Open
gergely wants to merge 3 commits from configurable-output into main
Showing only changes of commit 700027bdd5 - Show all commits

View File

@ -58,6 +58,50 @@
:type 'string :type 'string
:group 'org-clock-waybar) :group 'org-clock-waybar)
(defcustom org-clock-waybar-text-function
nil
"Function to generate the title text.
The function must return a single string.
When nil, `org-clock-waybar-get-task-title' is used."
:type 'function
:group 'org-clock-waybar)
(defcustom org-clock-waybar-alt-function
nil
"Function to generate the alternative text.
The function must return a single string.
When nil, `org-clock-waybar-get-task-category' is used."
:type 'function
:group 'org-clock-waybar)
(defcustom org-clock-waybar-class-function
nil
"Function to generate the class.
The function must either return a string, or a list of strings.
When nil, `org-clock-waybar-get-tags' is used."
:type 'function
:group 'org-clock-waybar)
(defcustom org-clock-waybar-tooltip-function
nil
"Function to generate the tooltip.
The function must return a string.
When nil, `org-clock-waybar-get-tooltip' is used."
:type 'function
:group 'org-clock-waybar)
(defcustom org-clock-waybar-percentage-function
nil
"Function to generate the percentage text.
When nil, the percentage text will be an empty string."
:type 'function
:group 'org-clock-waybar)
(defconst org-clock-waybar-filename-coding-system (defconst org-clock-waybar-filename-coding-system
(if (coding-system-p 'utf-8-emacs) (if (coding-system-p 'utf-8-emacs)
'utf-8-emacs 'utf-8-emacs
@ -74,6 +118,11 @@
"Get the category of TASK." "Get the category of TASK."
(when (org-clocking-p) (get-text-property 0 'org-category org-clock-current-task))) (when (org-clocking-p) (get-text-property 0 'org-category org-clock-current-task)))
(defun org-clock-waybar--list-of-strings-p (object)
"Return t if OBJECT is a list of strings."
(not (null (delq nil
(mapcar (lambda (x) (and (stringp x) x)) object)))))
(defun org-clock-waybar-get-tooltip () (defun org-clock-waybar-get-tooltip ()
"The default tooltip to send to waybar." "The default tooltip to send to waybar."
(when (org-clocking-p) (when (org-clocking-p)
@ -96,16 +145,42 @@
The output is in JSON format constructed in a way so Waybar can process it. The output is in JSON format constructed in a way so Waybar can process it.
If there is no clocked in task, alt becomes empty and text will be set to the If there is no clocked in task, alt becomes empty and text will be set to the
value of `org-clock-waybar-not-clocked-in-text'." value of `org-clock-waybar-not-clocked-in-text'."
(let* ((title (org-clock-waybar-get-task-title)) (let* ((text-func (or 'org-clock-waybar-text-function
(category (org-clock-waybar-get-task-category)) 'org-clock-waybar-get-task-title))
(tooltip (org-clock-waybar-get-tooltip)) (text (funcall text-func))
(class (org-clock-waybar-get-tags)) (alt-func (or 'org-clock-waybar-alt-function
'org-clock-waybar-get-task-category))
(alt (funcall alt-func))
(tooltip-func (or 'org-clock-waybar-tooltip-function
'org-clock-waybar-get-tooltip))
(tooltip (funcall tooltip-func))
(class-func (or 'org-clock-waybar-class-function
'org-clock-waybar-get-tags))
(class (funcall class-func))
(percentage (when (fboundp 'org-clock-waybar-percentage-function)
(funcall 'org-clock-waybar-percentage-function)))
(output (json-new-object))) (output (json-new-object)))
(setq output (json-add-to-object output "text" (or title ""))) (or (null title)
(setq output (json-add-to-object output "alt" (or category ""))) (stringp title)
(error "Title must be a string (org-clock-waybar)!"))
(or (null alt)
(stringp alt)
(error "Alt text must be a string (org-clock-waybar)!"))
(or (null tooltip)
(stringp tooltip)
(error "Tooltip must be a string (org-clock-waybar)!"))
(or (null class)
(stringp class)
(org-clock-waybar--list-of-strings-p class)
(error "Class must be a string or a list of strings (org-clock-waybar)!"))
(or (null percentage)
(stringp percentage)
(error "Percentage must be a string (org-clock-waybar)!"))
(setq output (json-add-to-object output "text" (or text "")))
(setq output (json-add-to-object output "alt" (or alt "")))
(setq output (json-add-to-object output "tooltip" (or tooltip ""))) (setq output (json-add-to-object output "tooltip" (or tooltip "")))
(setq output (json-add-to-object output "class" (or class ""))) (setq output (json-add-to-object output "class" (or class "")))
(setq output (json-add-to-object output "percentage" "")) (setq output (json-add-to-object output "percentage" (or percentage "")))
(json-encode output))) (json-encode output)))
(defun org-clock-waybar-save-task () (defun org-clock-waybar-save-task ()