From 82faddc8c3528bfdd14648c03726544507101e7a Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Fri, 12 Mar 2021 13:52:27 +0100 Subject: [PATCH 1/3] Rename most functions to remove the double dashes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This naming convention denotes “private” functions; however, if we want to introduce more customization, we should make these available and documented well. --- org-clock-waybar.el | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/org-clock-waybar.el b/org-clock-waybar.el index c475948..239a45f 100644 --- a/org-clock-waybar.el +++ b/org-clock-waybar.el @@ -67,24 +67,24 @@ 'emacs-mule) "Coding system of the file `org-clock-waybar-filename'.") -(defsubst org-clock-waybar--get-task-title () +(defsubst org-clock-waybar-get-task-title () "Get the title of TASK." (when (org-clocking-p) (substring-no-properties org-clock-current-task))) -(defsubst org-clock-waybar--get-task-category () +(defsubst org-clock-waybar-get-task-category () "Get the category of TASK." (when (org-clocking-p) (get-text-property 0 'org-category org-clock-current-task))) -(defun org-clock-waybar--get-tooltip () +(defun org-clock-waybar-get-tooltip () "The default tooltip to send to waybar." (when (org-clocking-p) (let ((clocked-time (org-clock-get-clocked-time))) (format "%s: %s (%s)" - (org-clock-waybar--get-task-category) - (org-clock-waybar--get-task-title) + (org-clock-waybar-get-task-category) + (org-clock-waybar-get-task-title) (org-duration-from-minutes clocked-time))))) -(defun org-clock-waybar--get-tags () +(defun org-clock-waybar-get-tags () "Get the tags of the currently clocked-in task." (when (org-clocking-p) (or (org-with-point-at org-clock-marker (org-get-tags)) @@ -97,9 +97,10 @@ 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 value of `org-clock-waybar-not-clocked-in-text'." - (let* ((category (org-clock-waybar--get-task-category)) - (title (org-clock-waybar--get-task-title)) - (tooltip (org-clock-waybar--get-tooltip)) + (let* ((title (org-clock-waybar-get-task-title)) + (category (org-clock-waybar-get-task-category)) + (tooltip (org-clock-waybar-get-tooltip)) + (class (org-clock-waybar-get-tags)) (output (json-new-object))) (setq output (json-add-to-object output @@ -107,7 +108,7 @@ value of `org-clock-waybar-not-clocked-in-text'." (or title org-clock-waybar-not-clocked-in-text))) (setq output (json-add-to-object output "alt" (or category ""))) (setq output (json-add-to-object output "tooltip" (or tooltip ""))) - (setq output (json-add-to-object output "class" (or (org-clock-waybar--get-tags) ""))) + (setq output (json-add-to-object output "class" (or class ""))) (setq output (json-add-to-object output "percentage" "")) (json-encode output))) -- 2.47.2 From 3301967d3ddcf12adbf2f2bb8f9f0a3567ec1d14 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Fri, 12 Mar 2021 17:18:43 +0100 Subject: [PATCH 2/3] Factor out clocked-out title generation to get-task-title --- org-clock-waybar.el | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/org-clock-waybar.el b/org-clock-waybar.el index 239a45f..ef028de 100644 --- a/org-clock-waybar.el +++ b/org-clock-waybar.el @@ -69,7 +69,9 @@ (defsubst org-clock-waybar-get-task-title () "Get the title of TASK." - (when (org-clocking-p) (substring-no-properties org-clock-current-task))) + (if (org-clocking-p) + (substring-no-properties org-clock-current-task) + org-clock-waybar-not-clocked-in-text)) (defsubst org-clock-waybar-get-task-category () "Get the category of TASK." @@ -102,10 +104,7 @@ value of `org-clock-waybar-not-clocked-in-text'." (tooltip (org-clock-waybar-get-tooltip)) (class (org-clock-waybar-get-tags)) (output (json-new-object))) - (setq output (json-add-to-object - output - "text" - (or title org-clock-waybar-not-clocked-in-text))) + (setq output (json-add-to-object output "text" (or title ""))) (setq output (json-add-to-object output "alt" (or category ""))) (setq output (json-add-to-object output "tooltip" (or tooltip ""))) (setq output (json-add-to-object output "class" (or class ""))) -- 2.47.2 From 3779adda252494ce8ac7b9f050ca95e1c5cf8aba Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Fri, 12 Mar 2021 17:21:44 +0100 Subject: [PATCH 3/3] Make different parts of the output configurable by setting user functions --- org-clock-waybar.el | 89 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 82 insertions(+), 7 deletions(-) diff --git a/org-clock-waybar.el b/org-clock-waybar.el index ef028de..5709b91 100644 --- a/org-clock-waybar.el +++ b/org-clock-waybar.el @@ -61,6 +61,50 @@ :type 'string :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 (if (coding-system-p 'utf-8-emacs) 'utf-8-emacs @@ -77,6 +121,11 @@ "Get the category of 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 () "The default tooltip to send to waybar." (when (org-clocking-p) @@ -99,16 +148,42 @@ 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 value of `org-clock-waybar-not-clocked-in-text'." - (let* ((title (org-clock-waybar-get-task-title)) - (category (org-clock-waybar-get-task-category)) - (tooltip (org-clock-waybar-get-tooltip)) - (class (org-clock-waybar-get-tags)) + (let* ((text-func (or 'org-clock-waybar-text-function + 'org-clock-waybar-get-task-title)) + (text (funcall text-func)) + (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))) - (setq output (json-add-to-object output "text" (or title ""))) - (setq output (json-add-to-object output "alt" (or category ""))) + (or (null title) + (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 "class" (or class ""))) - (setq output (json-add-to-object output "percentage" "")) + (setq output (json-add-to-object output "percentage" (or percentage ""))) (json-encode output))) (defun org-clock-waybar-save-task () -- 2.47.2