From 36d515d3dc99540c8689204393e97e223fd4a677 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Fri, 12 Mar 2021 13:52:27 +0100 Subject: [PATCH 1/4] 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 2eb1d60..c657959 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.49.1 From 837a85f47b156ceef0cb20bfee5024ef2a808b14 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Fri, 12 Mar 2021 17:18:43 +0100 Subject: [PATCH 2/4] 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 c657959..7e46817 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.49.1 From a192128d0d427d79ea32cd5224cc69e1797ed774 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Fri, 12 Mar 2021 17:21:44 +0100 Subject: [PATCH 3/4] 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 7e46817..6228e62 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.49.1 From 17b05377b99bb19461b71ac65b8030ba58060cbe Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Tue, 3 Feb 2026 10:14:03 +0000 Subject: [PATCH 4/4] try a different quoting --- org-clock-waybar.el | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/org-clock-waybar.el b/org-clock-waybar.el index 6228e62..cf0b920 100644 --- a/org-clock-waybar.el +++ b/org-clock-waybar.el @@ -148,24 +148,24 @@ When nil, the percentage text will be an empty string." 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* ((text-func (or 'org-clock-waybar-text-function - 'org-clock-waybar-get-task-title)) + (let* ((text-func (or (and (fboundp ('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-func (or (and (fboundp ('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-func (or (and (fboundp ('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-func (or (and (fboundp ('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))) + (funcall #'org-clock-waybar-percentage-function))) (output (json-new-object))) - (or (null title) - (stringp title) - (error "Title must be a string (org-clock-waybar)!")) + (or (null text) + (stringp text) + (error "Text must be a string (org-clock-waybar)!")) (or (null alt) (stringp alt) (error "Alt text must be a string (org-clock-waybar)!")) -- 2.49.1