Make different parts of the output configurable by setting user functions
This commit is contained in:
		@@ -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 ()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user