3 Commits

Author SHA1 Message Date
700027bdd5 Make different parts of the output configurable by setting user functions 2021-03-12 17:58:55 +01:00
1dafd1306e Factor out clocked-out title generation to get-task-title 2021-03-12 17:58:12 +01:00
2d820dbf87 Rename most functions to remove the double dashes
This naming convention denotes “private” functions; however, if we want to introduce more
customization, we should make these available and documented well.
2021-03-12 17:58:10 +01:00

View File

@@ -1,13 +1,12 @@
;;; ... -*- lexical-binding: t -*-
;;; org-clock-waybar.el --- Summary
;; Copyright (C) 2021 Gergely Polonkai
;; Author: Gergely Polonkai <gergely@polonkai.eu>
;; Keywords: org, clocking, waybar
;; Version: 1.0
;; Package-Requires: ((emacs "26.1"))
;; URL: https://gitea.polonkai.eu/gergely/org-clock-waybar
;; Package-Version: 1.0
;; Package-Requires: ((emacs "26.1") (org-mode "9"))
;; 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
@@ -39,7 +38,7 @@
;;; Code:
(require 'xdg nil t)
(require 'xdg)
(require 'json)
(require 'org-clock)
@@ -48,9 +47,7 @@
:group 'emacs)
(defcustom org-clock-waybar-filename
(if (fboundp 'xdg-cache-home)
(expand-file-name "waybar-current-task.json" (xdg-cache-home))
(expand-file-name "~/.cache/waybar-current-task.json"))
(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)
@@ -138,12 +135,12 @@ When nil, the percentage text will be an empty string."
(defun org-clock-waybar-get-tags ()
"Get the tags of the currently clocked-in task."
(when (org-clocking-p)
(or (org-with-point-at org-clock-marker (org-get-tags))
"")
))
(save-window-excursion
(org-clock-goto)
(org-get-tags))))
(defun org-clock-waybar--get-clocked-task-json ()
"Get the currently clocked-in task's 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.
If there is no clocked in task, alt becomes empty and text will be set to the
@@ -194,24 +191,19 @@ value of `org-clock-waybar-not-clocked-in-text'."
(insert (org-clock-waybar--get-clocked-task-json))
(write-file org-clock-waybar-filename)))
(defun org-clock-waybar-output-task ()
(defun org-clock-waybar-ouptut-task ()
"Output the current task in JSON format Waybar can understand.
This function is ought to be used via Emacsclient:
emacsclient --eval '(org-clock-waybar-output-task)'"
(let* ((output (org-clock-waybar--get-clocked-task-json))
(start 0)
(end (length output)))
(set-text-properties start end nil output)
output))
(org-clock-waybar--get-clocked-task-json))
(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-cancel-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 'kill-emacs-hook #'org-clock-waybar-save-task))