From 7648b9629c6978aa9de5336966c523beab2c4e87 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Fri, 12 Mar 2021 05:42:26 +0100 Subject: [PATCH] Make getting task data more error prone (and actually working) --- org-clock-waybar.el | 39 ++++++++++++++------------------------- 1 file changed, 14 insertions(+), 25 deletions(-) diff --git a/org-clock-waybar.el b/org-clock-waybar.el index e81221c..d3a0c32 100644 --- a/org-clock-waybar.el +++ b/org-clock-waybar.el @@ -64,36 +64,31 @@ 'emacs-mule) "Coding system of the file `org-clock-waybar-filename'.") -(defsubst org-clock-waybar--get-task-title (task) +(defsubst org-clock-waybar--get-task-title () "Get the title of TASK." - (when task (substring-no-properties task))) + (when (org-clocking-p) (substring-no-properties org-clock-current-task))) -(defsubst org-clock-waybar--get-task-category (task) +(defsubst org-clock-waybar--get-task-category () "Get the category of TASK." - (when task (get-text-property 0 'org-category task))) + (when (org-clocking-p) (get-text-property 0 'org-category org-clock-current-task))) (defun org-clock-waybar--get-tooltip () "The default tooltip to send to waybar." - (when org-clock-current-task + (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-duration-from-minutes clocked-time))))) -(defun org-clock-waybar--get-clocked-task-json (&optional clocking-out) +(defun org-clock-waybar--get-clocked-task-json () "Get the currently clocked-in task’s data as a stringified JSON object. 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'. - -If CLOCKING-OUT is non-nil, `org-clock-current-task' will be treated as if it -were nil; this is required because `org-clock-out' calls the hook functions -before setting `org-clock-current-task' to nil." - (let* ((task (if clocking-out nil org-clock-current-task)) - (category (org-clock-waybar--get-task-title task)) - (title (org-clock-waybar--get-task-category task)) +value of `org-clock-waybar-not-clocked-in-text'." + (let* ((category (org-clock-waybar--get-task-title)) + (title (org-clock-waybar--get-task-category)) (tooltip (org-clock-waybar--get-tooltip)) (output (json-new-object))) (setq output (json-add-to-object @@ -106,20 +101,14 @@ before setting `org-clock-current-task' to nil." (setq output (json-add-to-object output "percentage" "")) (json-encode output))) -(defun org-clock-waybar-save-task (&optional clocking-out) - "Save the current clocked in task to `org-clock-waybar-filename'. - -If CLOCKING-OUT is non-nil, treat the current task as if it were nil." +(defun org-clock-waybar-save-task () + "Save the current clocked in task to `org-clock-waybar-filename'." (with-temp-buffer (erase-buffer) (set-buffer-file-coding-system org-clock-waybar-filename-coding-system) - (insert (org-clock-waybar--get-clocked-task-json clocking-out)) + (insert (org-clock-waybar--get-clocked-task-json)) (write-file org-clock-waybar-filename))) -(defun org-clock-waybar-clear-task () - "Clear the current task from `org-clock-waybar-filename'." - (org-clock-waybar-save-task t)) - (defun org-clock-waybar-ouptut-task () "Output the current task in JSON format Waybar can understand. @@ -134,8 +123,8 @@ emacsclient --eval '(org-clock-waybar-output-task)'" It adds `org-clock-waybar-save-task' to both `org-clock-in-hook' and `org-clock-out-hook'." (add-hook 'org-clock-in-hook #'org-clock-waybar-save-task) - (add-hook 'org-clock-out-hook #'org-clock-waybar-task) - (add-hook 'kill-emacs-hook #'org-clock-waybar-clear-task)) + (add-hook 'org-clock-out-hook #'org-clock-waybar-save-task) + (add-hook 'kill-emacs-hook #'org-clock-waybar-save-task)) (provide 'org-clock-waybar) ;;; org-clock-waybar.el ends here