This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#+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 bar’s 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 can’t 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
Description
Languages
Emacs Lisp
100%