I created this to replicate the functionality I got with polybar hook modules and polify in the XFCE panel with the genmon plugin.
If you use Arch Linux you can get
genmonify from AUR. all you need is the
genmonify
script in your PATH. Use the Makefile
to do a systemwide installation of both the script
and the manpage.
(configure the installation destination in the Makefile, if needed)
$ git clone https://github.com/budlabs/genmonify.git
$ cd genmonify
$ make
# make install
$ genmonify -v
genmonify - version: 2020.11.16.0
updated: 2020-11-16 by budRich
-b, --background COLOR | color value for MESSAGE background color.
-x, --clear | clears the module.
-C, --click COMMAND | COMMAND will be executed when the IMAGE is clicked.
-t, --expire-time SECONDS | if set module will get cleared after SECONDS
-f, --foreground COLOR | color value for MESSAGE foreground color.
-g, --get | prints the content of target modules `<msg>`
-h, --help | print help and exit
-i, --icon ICON_NAME | name (not path) of icon for `<icon>`
-c, --iconclick COMMAND | COMMAND will be executed when the **ICON** is clicked.
-I, --img IMAGE | full path to image to prefix the label with
--list | list IDs of Generic Monitors, left to right in active panel
-o, --module MODULE_ALIAS | name of target module
-s, --msg MESSAGE | set the `<msg>` field
-p, --progress PERCENTAGE | percentage to display in the progressbar.
-l, --tooltip PANGO | set text to display in the tooltip
-v, --version | print version info and exit
To make genmonify (and genmon) somewhat usable you need to do two things:
- set up one or more genmon plugins/modules in your xfce4-panel
- set up aliases for these modules.
The first step is easy, just add a genmon module
to your panel and open its properties dialog.
There as the command enter:
genmonify --module NAME
where NAME can be anything you
want. Also be sure to set the Period
(interval) to max value of 86400 seconds (24h).
The second step is a little bit trickier. First
execute genmonify
without any arguments. This
should create an example alias-file. The default
location for this file is
~/.config/genmonify/module-list In that file
there are instructions for how to set the aliases
for the modules. genmonify updates the modules
by sending the following command:
xfce4-panel --plugin-event=genmon-ID:refresh:bool:true
Where ID should be replaced with the actual plugin-id.
The easiest way to find the IDs is to exctue
genmonify with the --list
option.
genomify --list
24 25 18 23 10 19
Found IDs are printed left to right in the order they appear in the panel.
If this doesn't work you have to manually find the IDs in the file:
~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
find lines that looks like this (search for "genmon"):
<property name="plugin-2" type="string" value="genmon"/>
Lets say we have two genmon plugins, and their
ID's are 2 and 10. And they have the
following commands set in their respective
properties:
2: genmonify --module mediainfo
10: genmonify --module internet
we should then add the following lines to the module-list file:
modules[mediainfo]=2
modules[internet]=10
When genmonify is executed with only the --module MODULE_NAME
option, all it will do is cat
the
content of the file: /tmp/genmonify/MODULE_NAME
. When this is done from a genmon plugin in the
panel, it will set the plugins text based on
the content of the file.
Any arguments to the genmonify
command that
doesn't belong to an option, will get redirected
(and formatted if needed or requested) to
/tmp/genmonify/MODULE_NAME
. Then the command
xfce4-panel --plugin-event=genmon-ID:refresh:bool:true
will get executed, causing the module to get updated.
EXAMPLE:
$ genmonify --module mediainfo testing one three four
this will first create (or overwrite) the file: /tmp/genmonify/mediainfo with the single line: testing one three four
then the command:
xfce4-panel --plugin-event=genmon-2:refresh:bool:true
is automatically executed, which will update the
plugin and the Command set in the properties
will run again: (genmonify --module mediainfo
),
which in turn will update the module with the
string: "testing one three four"
The --expire-time SECONDS
option can be used to
clear the module when SECONDS have passed. It is
also possible to manually clear a module with the
--clear
option.
genmonify is shipped with the script
genmonifypop, which can be used to execute
commands on the --msg
line. It will only execute
a command if it is prefixed with the word
POLIPOP. And the first argument to
genmonifypop needs to be the name of the
module, it is sweet to bind genmonifypop to a
hotkey...
$ genmonify --module genmonifyModule1 --msg "POLIPOP notify-send 'hello pop'" hello guy
$ genmonifypop genmonifyModule1
In the example below you can see how --msg
and
--get
can be used to keep track and toggle a
modules state.
genmonifymodetoggler.sh
#!/bin/bash
thisscript="$(readlink -f "$0")"
if [[ $(genmonify --module genmonifyModule1 --get) = mode1 ]]; then
genmonify --module genmonifyModule1 \
--iconclick "$thisscript" \
--foreground '#00FF00' \
--icon dialog-warning \
--msg "mode2" \
this is mode two
else
genmonify --module genmonifyModule1 \
--iconclick "$thisscript" \
--foreground '#FF0000' \
--icon dialog-warning \
--msg "mode1" \
this is mode one
fi
genmonify is licensed with BSD 2-Clause Lincense
Previous releasenotes can be found in docs/releasenotes.
Updated bashbud build system