Initial, untested version
This commit is contained in:
		
							
								
								
									
										59
									
								
								org-clock-waybar.el
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								org-clock-waybar.el
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| ;;; org-clock-waybar --- Summary | ||||
|  | ||||
| ;;; Commentary: | ||||
|  | ||||
| ;;; Code: | ||||
|  | ||||
| (require 'xdg) | ||||
| (require 'org-clock) | ||||
|  | ||||
| (defgroup org-clock-waybar nil | ||||
|   "Send current clocked task to a JSON file for Waybar visualization" | ||||
|   :group 'emacs) | ||||
|  | ||||
| (defcustom org-clock-waybar-filename | ||||
|   (expand-file-name ".waybar-current-task.json" (xdg-cache-home)) | ||||
|   "Name of the file to save task data to." | ||||
|   :type 'string | ||||
|   :group 'org-clock-waybar) | ||||
|  | ||||
| (defconst org-clock-waybar-filename-coding-system | ||||
|   (if (coding-system-p 'utf-8-emacs) | ||||
|       'utf-8-emacs | ||||
|     'emacs-mule) | ||||
|   "Coding system of the file `org-clock-waybar-filename'.") | ||||
|  | ||||
| (defun org-clock-waybar--get-clocked-task-json (buffer) | ||||
|   "Save the current clocked-in task’s title and category to BUFFER. | ||||
|  | ||||
| The output is in JSON format.  If there is no clocked in task, both title and | ||||
| category will be a JSON null value." | ||||
|   (let ((category (when org-clock-current-task | ||||
|                     (get-text-property 0 'org-category org-clock-current-task))) | ||||
|         (title (when org-clock-current-task | ||||
|                  (substring-no-properties org-clock-current-task)))) | ||||
|     (with-current-buffer buffer | ||||
|       (insert "{\"title\":") | ||||
|       (insert (if title (json-encode-string title) "null")) | ||||
|       (insert ",\"category\":") | ||||
|       (insert (if category (json-encode-string category) "null")) | ||||
|       (insert "}")))) | ||||
|  | ||||
| (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) | ||||
|     (org-clock-waybar--get-clocked-task-json (current-buffer)) | ||||
|     (write-file org-clock-waybar-filename))) | ||||
|  | ||||
| (defun org-clock-waybar-setup () | ||||
|   "Setup org-clock-waybar. | ||||
|  | ||||
| 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-save-task)) | ||||
|  | ||||
| (provide 'org-clock-waybar) | ||||
| ;;; org-clock-waybar.el ends here | ||||
		Reference in New Issue
	
	Block a user