From 1120762348c96c72a7564860fb1030509ae93041 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Thu, 11 Mar 2021 05:46:58 +0100 Subject: [PATCH] Make org-clock-waybar--get-clocked-task-json output a JSON structure Waybar can understand --- org-clock-waybar.el | 51 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/org-clock-waybar.el b/org-clock-waybar.el index 24bafa4..cd8b9e4 100644 --- a/org-clock-waybar.el +++ b/org-clock-waybar.el @@ -1,10 +1,45 @@ ;;; org-clock-waybar --- Summary +;; Copyright (C) 2021 Gergely Polonkai + +;; Author: Gergely Polonkai +;; Keywords: org, clocking, waybar +;; Version: 1.0 +;; Package-Requires: ((emacs "26.1")) +;; URL: https://gitea.polonkai.eu/gergely/org-clock-waybar + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + ;;; Commentary: +;; Export the currently clocked-in task in JSON format that Waybar can process +;; +;; To use it, customize the `org-clock-waybar-filename' variable (defaults to +;; $XDG_CONFIG_HOME/waybar-current-task.json) and add the following snippet to +;; your Waybar config: +;; +;; "custom/org": { +;; "format": " {}", +;; "return-type": "json", +;; "restart-interval": 5, +;; "exec": "cat /home/yourusername/.cache/waybar-current-task.json" +;; } + ;;; Code: (require 'xdg) +(require 'json) (require 'org-clock) (defgroup org-clock-waybar nil @@ -12,7 +47,7 @@ :group 'emacs) (defcustom org-clock-waybar-filename - (expand-file-name ".waybar-current-task.json" (xdg-cache-home)) + (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) @@ -31,13 +66,15 @@ 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)))) + (substring-no-properties org-clock-current-task))) + (output (json-new-object))) (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 "}")))) + (setq output (json-add-to-object output "text" (if title title "Not clocked in"))) + (setq output (json-add-to-object output "alt" (if category category ""))) + (setq output (json-add-to-object output "tooltip" "")) + (setq output (json-add-to-object output "class" "")) + (setq output (json-add-to-object output "percentage" "")) + (insert (json-encode output))))) (defun org-clock-waybar-save-task () "Save the current clocked in task to `org-clock-waybar-filename'."