Compare commits

..

2 Commits

Author SHA1 Message Date
73918c2b39
Add instructions for configuring for the Eww bar 2023-10-27 05:56:59 +02:00
d77835d97b
Redesign README to become an Org document
Why would we use markdown in the Emacs world, right?
2023-10-27 05:47:59 +02:00
3 changed files with 121 additions and 107 deletions

104
README.md
View File

@ -1,104 +0,0 @@
# org-clock-waybar Export the currently clocked-in task to be displayed on Waybar
## Installation
Put `org-clock-waybar.el` somewhere in your `load-path`, and `(require 'org-clock-waybar)`.
MELPA version may come soon.
You can set the file to be written by customizing `org-clock-waybar-filename`; it defaults to
`$XDG_CACHE_HOME/waybar-current-task.json` (`$XDG_CACHE_HOME` defaults to `$HOME/.cache` on XDG
compatible systems, like Linux.)
### Quelpa
If you only have [`quelpa`](https://github.com/quelpa/quelpa) installed:
```elisp
(quelpa
'(org-clock-waybar
:fetcher git
:url "https://gitea.polonkai.eu/gergely/org-clock-waybar.git"))
```
or, if you have [`quelpa-use-package`](https://github.com/quelpa/quelpa-use-package) installed,
too:
```elisp
(quelpa-use-package org-clock-waybar
:quelpa (org-clock-waybar
:fetcher git
:url "https://gitea.polonkai.eu/gergely/org-clock-waybar.git"))
```
## Waybar configuration
To add the current task to Waybar, add this snippet to your config:
```json
"custom/org": {
"format": " {}",
"return-type": "json",
"restart-interval": 5,
"exec": "cat /home/yourusername/.cache/waybar-current-task.json"
}
```
Then, add `custom/org` to `modules-left`/`modules-center`/`module-right` if your bars
configuration. You can find a minimal working configuration in the [`examples`](./examples)
directory.
### Additional Configuration
You can also display an icon specific to the clocked tasks category with the `format-icons` key:
```json
"custom/org": {
"format": "{icon} {}",
"return-type": "json",
"restart-interval": 1,
"format-icons": {
"refile": "",
"ToDo": "",
},
"exec": "cat /home/yourusername/.cache/waybar-current-task.json"
}
```
If you use Emacs as a daemon (e.g. starting it as `emacs --daemon` or calling `(server-start)`),
you can change the `exec` command to invoke `emacsclient` directly. Note that, since Emacsclient
cant actually write stuff to the terminal, it will output an Emacs string full of backslashes
(see [this Emacs SE answer for details](https://emacs.stackexchange.com/a/28668/507)); thus, you
have to pipe the output through `jq fromjson`.
If you run emacs in this mode you can also eval commands on click, middle click or scroll.:
```json
"custom/org": {
"format": "{icon} {}",
"return-type": "json",
"restart-interval": 1,
"format-icons": {
"refile": "",
"ToDo": "",
},
"exec": "emacsclient --eval '(org-clock-waybar-ouptut-task)' | jq fromjson --unbuffered --compact-output",
"on-click": "emacsclient --eval '(org-clock-out)'",
"on-middle-click": "emacsclient --eval '(org-clock-in-last)'",
},
```
If you want the taskbar to show nothing or some other content if the emacs server is not running then you need to write a short bash script to catch when the emacsclient command returns a non-zero exit code. An example of this is:
```bash
#!/bin/bash
json=$(emacsclient --eval '(org-clock-waybar-ouptut-task)' 2> /dev/null)
status=$?
[ $status -eq 0 ] && echo $(echo $json | jq fromjson --unbuffered --compact-output) || echo ""
```
## Customization
To see a list of configurable parts, use `M-x customize-group <RET> org-clock-waybar`.

119
README.org Normal file
View File

@ -0,0 +1,119 @@
#+TITLE: org-clock-waybar Export the currently clocked-in task to be displayed on Waybar
* Installation
Put ~org-clock-waybar.el~ somewhere in your ~load-path~, and ~(require 'org-clock-waybar)~.
MELPA version may come soon.
** Quelpa
If you only have [[https://github.com/quelpa/quelpa][quelpa]] installed:
#+begin_src emacs-lisp
(quelpa
'(org-clock-waybar
:fetcher git
:url "https://gitea.polonkai.eu/gergely/org-clock-waybar.git"))
#+end_src
or, if you have [[https://github.com/quelpa/quelpa-use-package][quelpa-use-package] installed,
too:
#+begin_src emacs-lisp
(quelpa-use-package org-clock-waybar
:quelpa (org-clock-waybar
:fetcher git
:url "https://gitea.polonkai.eu/gergely/org-clock-waybar.git"))
#+end_src
* Customization
To see a list of configurable parts, use ~M-x customize-group <RET> org-clock-waybar~.
You can set the file to be written by customizing ~org-clock-waybar-filename~; it
defaults to ~$XDG_CACHE_HOME/waybar-current-task.json~ (~$XDG_CACHE_HOME~ defaults
to ~$HOME/.cache~ on XDG compatible systems, like Linux.)
* Waybar configuration
To add the current task to Waybar, add this snippet to your config:
#+begin_src json
"custom/org": {
"format": " {}",
"return-type": "json",
"restart-interval": 5,
"exec": "cat /home/yourusername/.cache/waybar-current-task.json"
}
#+end_src
Then, add ~custom/org~ to your ~modules-left~, ~modules-center~, or ~module-right~
section in your bars configuration. You can find a minimal working
configuration in the [[./examples][examples]] directory.
** Additional Configuration
You can also display an icon specific to the clocked tasks category with the ~format-icons~ key:
#+begin_src json
"custom/org": {
"format": "{icon} {}",
"return-type": "json",
"restart-interval": 1,
"format-icons": {
"refile": "",
"ToDo": "",
},
"exec": "cat /home/yourusername/.cache/waybar-current-task.json"
}
#+end_src
If you use Emacs as a daemon (e.g. starting it as ~emacs --daemon~ or calling
~(server-start)~), you can change the ~exec~ command to invoke ~emacsclient~ directly.
Note that, since Emacsclient cant actually write stuff to the terminal, it will
output an Emacs string full of backslashes (see [[https://emacs.stackexchange.com/a/28668/507][this Emacs SE answer for
details]]); thus, you have to pipe the output through ~jq fromjson~.
If you run emacs in this mode you can also eval commands on click, middle click or scroll.:
#+begin_src json
"custom/org": {
"format": "{icon} {}",
"return-type": "json",
"restart-interval": 1,
"format-icons": {
"refile": "",
"ToDo": "",
},
"exec": "emacsclient --eval '(org-clock-waybar-ouptut-task)' | jq fromjson --unbuffered --compact-output",
"on-click": "emacsclient --eval '(org-clock-out)'",
"on-middle-click": "emacsclient --eval '(org-clock-in-last)'",
},
#+end_src
If you want the taskbar to show nothing or some other content if the emacs server is not running then you need to write a short bash script to catch when the emacsclient command returns a non-zero exit code. An example of this is:
#+begin_src bash
#!/bin/bash
json=$(emacsclient --eval '(org-clock-waybar-ouptut-task)' 2> /dev/null)
status=$?
[ $status -eq 0 ] && echo $(echo $json | jq fromjson --unbuffered --compact-output) || echo ""
#+end_src
* Eww bar configuration
Waybar is still popular, but it also seems [[https://elkowar.github.io/eww/][Eww]] is also gaining popularity.
#+begin_src yuck
(defpoll current-org-task :interval "1s" :initial "{}" "cat /home/yourusername/.cache/waybar-current-task.json")
(defwidget current-org-task-widget []
{current-org-task.text})
(defwidget bar []
(box
:orientation "h"
(current-org-task-widget)))
#+end_src

View File

@ -1,4 +1,3 @@
;;; ... -*- lexical-binding: t -*-
;;; org-clock-waybar.el --- Summary ;;; org-clock-waybar.el --- Summary
;; Copyright (C) 2021 Gergely Polonkai ;; Copyright (C) 2021 Gergely Polonkai
@ -92,7 +91,7 @@
)) ))
(defun org-clock-waybar--get-clocked-task-json () (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. 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
@ -119,7 +118,7 @@ value of `org-clock-waybar-not-clocked-in-text'."
(insert (org-clock-waybar--get-clocked-task-json)) (insert (org-clock-waybar--get-clocked-task-json))
(write-file org-clock-waybar-filename))) (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. "Output the current task in JSON format Waybar can understand.
This function is ought to be used via Emacsclient: This function is ought to be used via Emacsclient: