You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
Gergely Polonkai 754fd9d2fa Merge pull request '[Bugfix] Make sure we remove all text properties before outputting JSON data' (#8) from remove-text-properties into main 8 hours ago
examples Add documentation 7 months ago
COPYING Add documentation 7 months ago
README.md Add installation instructions for quelpa/quelpa-use-package 7 months ago
org-clock-waybar.el Merge pull request '[Bugfix] Make sure we remove all text properties before outputting JSON data' (#8) from remove-text-properties into main 8 hours ago

README.md

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 installed:

(quelpa
 '(org-clock-waybar
   :fetcher git
   :url "https://gitea.polonkai.eu/gergely/org-clock-waybar.git"))

or, if you have quelpa-use-package installed, too:

(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:

"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 bar’s configuration. You can find a minimal working configuration in the examples directory.

Additional Configuration

You can also display an icon specific to the clocked tasks category with the format-icons key:

"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 can’t actually write stuff to the terminal, it will output an Emacs string full of backslashes (see 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.:

"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:

#!/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.