Compare commits

..

No commits in common. "f90fee167febbc5a896812a59698317c1964b01a" and "bc61218f922337e70c379b05d3b61ceba54b34a5" have entirely different histories.

View File

@ -64,58 +64,56 @@
'emacs-mule) 'emacs-mule)
"Coding system of the file `org-clock-waybar-filename'.") "Coding system of the file `org-clock-waybar-filename'.")
(defsubst org-clock-waybar--get-task-title () (defun org-clock-waybar-tooltip ()
"Get the title of TASK."
(when (org-clocking-p) (substring-no-properties org-clock-current-task)))
(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 ()
"The default tooltip to send to waybar." "The default tooltip to send to waybar."
(when (org-clocking-p) (when org-clock-current-task
(let ((clocked-time (org-clock-get-clocked-time))) (let ((clocked-time (org-clock-get-clocked-time)))
(format "%s: %s (%s)" (format "%s: %s (%s)"
(org-clock-waybar--get-task-category) (org-clock-waybar-alt)
(org-clock-waybar--get-task-title) (org-clock-waybar-text)
(org-duration-from-minutes clocked-time))))) (org-duration-from-minutes clocked-time)))))
(defun org-clock-waybar--get-tags () (defun org-clock-waybar--get-clocked-task-json (&optional clocking-out)
"Get the tags of the currently clocked-in task."
(when (org-clocking-p)
(save-window-excursion
(org-clock-goto)
(org-get-tags))))
(defun org-clock-waybar--get-clocked-task-json ()
"Get the currently clocked-in tasks data as a stringified JSON object. "Get the currently clocked-in tasks data as a stringified JSON object.
The output is in JSON format constructed in a way so Waybar can process it. 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 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'." value of `org-clock-waybar-not-clocked-in-text'.
(let* ((category (org-clock-waybar--get-task-title))
(title (org-clock-waybar--get-task-category)) If CLOCKING-OUT is non-nil, `org-clock-current-task' will be treated as if it
(tooltip (org-clock-waybar--get-tooltip)) 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 (when task (get-text-property 0 'org-category task)))
(title (when task (substring-no-properties task)))
(tooltip (org-clock-waybar-tooltip))
(output (json-new-object))) (output (json-new-object)))
(setq output (json-add-to-object (setq output (json-add-to-object
output output
"text" "text"
(or title org-clock-waybar-not-clocked-in-text))) (if title
(setq output (json-add-to-object output "alt" (or category ""))) title
(setq output (json-add-to-object output "tooltip" (or tooltip ""))) org-clock-waybar-not-clocked-in-text)))
(setq output (json-add-to-object output "class" (or (org-clock-waybar--get-tags) ""))) (setq output (json-add-to-object output "alt" (if category category "")))
(setq output (json-add-to-object output "tooltip" (if tooltip tooltip "")))
(setq output (json-add-to-object output "class" ""))
(setq output (json-add-to-object output "percentage" "")) (setq output (json-add-to-object output "percentage" ""))
(json-encode output))) (json-encode output)))
(defun org-clock-waybar-save-task () (defun org-clock-waybar-save-task (&optional clocking-out)
"Save the current clocked in task to `org-clock-waybar-filename'." "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."
(with-temp-buffer (with-temp-buffer
(erase-buffer) (erase-buffer)
(set-buffer-file-coding-system org-clock-waybar-filename-coding-system) (set-buffer-file-coding-system org-clock-waybar-filename-coding-system)
(insert (org-clock-waybar--get-clocked-task-json)) (insert (org-clock-waybar--get-clocked-task-json clocking-out))
(write-file org-clock-waybar-filename))) (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 () (defun org-clock-waybar-ouptut-task ()
"Output the current task in JSON format Waybar can understand. "Output the current task in JSON format Waybar can understand.
@ -130,8 +128,8 @@ emacsclient --eval '(org-clock-waybar-output-task)'"
It adds `org-clock-waybar-save-task' to both `org-clock-in-hook' and It adds `org-clock-waybar-save-task' to both `org-clock-in-hook' and
`org-clock-out-hook'." `org-clock-out-hook'."
(add-hook 'org-clock-in-hook #'org-clock-waybar-save-task) (add-hook 'org-clock-in-hook #'org-clock-waybar-save-task)
(add-hook 'org-clock-out-hook #'org-clock-waybar-save-task) (add-hook 'org-clock-out-hook #'org-clock-waybar-task)
(add-hook 'kill-emacs-hook #'org-clock-waybar-save-task)) (add-hook 'kill-emacs-hook #'org-clock-waybar-clear-task))
(provide 'org-clock-waybar) (provide 'org-clock-waybar)
;;; org-clock-waybar.el ends here ;;; org-clock-waybar.el ends here