Make getting task data more error prone (and actually working)
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user