From 2d820dbf871438f871a129fd65e99007ca44f96d 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 766b130..3ad7910 100644 --- a/org-clock-waybar.el +++ b/org-clock-waybar.el @@ -64,24 +64,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) (save-window-excursion @@ -94,9 +94,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 @@ -104,7 +105,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.45.2 From 1dafd1306e537a20074384f67476622f4d3bf402 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 3ad7910..93d7f12 100644 --- a/org-clock-waybar.el +++ b/org-clock-waybar.el @@ -66,7 +66,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." @@ -99,10 +101,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.45.2 From 700027bdd50351532df72498b68a921a65ca2113 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 93d7f12..0ca2802 100644 --- a/org-clock-waybar.el +++ b/org-clock-waybar.el @@ -58,6 +58,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 @@ -74,6 +118,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) @@ -96,16 +145,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.45.2