made signals more user-friendly
This commit is contained in:
parent
74b8ebf13e
commit
8f21e05fcf
4 changed files with 53 additions and 3 deletions
31
README.md
31
README.md
|
@ -1,3 +1,32 @@
|
||||||
# easyconf-lemonbar
|
# easyconf-lemonbar
|
||||||
|
|
||||||
A python script to easily configure lemonbar. Object-oriented.
|
A python script to easily configure lemonbar.
|
||||||
|
|
||||||
|
### Signals
|
||||||
|
You may update individual modules by sending a real-time signal to the
|
||||||
|
easyconf-lemonbar process. First, in the module configuration, specify which
|
||||||
|
signal to listen for, e.g.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Display a random number, and only update when we recieve the RTMIN+1 signal.
|
||||||
|
- name: "random"
|
||||||
|
command: "python -c 'from random import randrange; print(randrange(1000))'"
|
||||||
|
refresh: 0
|
||||||
|
signal: 1
|
||||||
|
```
|
||||||
|
|
||||||
|
In the example above, the refresh is `0`. This means that the module *will never
|
||||||
|
refresh on its own*; it will wait for the RTMIN+1 signal. You may also configure
|
||||||
|
your module to both refresh on a time interval AND listen for a signal.
|
||||||
|
|
||||||
|
Unfortunately, to send the signal, you cant just `pkill easyconf-lemonbar`. You
|
||||||
|
have to read the PID from ECL's pidfile. I would recommend creating an alias in
|
||||||
|
your shell as shown below.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ alias ecl_kill="cat /run/user/${UID}/easyconf-lemonbar.pid | xargs kill"
|
||||||
|
$ ecl_kill -RTMIN+1
|
||||||
|
```
|
||||||
|
|
||||||
|
This will refresh the module that is listening for signal `1`. To kill ecl
|
||||||
|
completely, just run `ecl_kill` (after setting the above alias).
|
||||||
|
|
|
@ -62,8 +62,7 @@ bar:
|
||||||
# Prefix to be printed before the text of the command.
|
# Prefix to be printed before the text of the command.
|
||||||
prefix: "DATE: "
|
prefix: "DATE: "
|
||||||
# Linux real-time signal that, when received, will refresh the module
|
# Linux real-time signal that, when received, will refresh the module
|
||||||
# instantly. For example, if you set this to `1`, run
|
# instantly. See docs for more info.
|
||||||
# `pkill -RTMIN+1 easyconf-lemonbar`.
|
|
||||||
signal: 0
|
signal: 0
|
||||||
# Formatting options. These will only affect the text and padding of this
|
# Formatting options. These will only affect the text and padding of this
|
||||||
# module.
|
# module.
|
||||||
|
|
|
@ -1,8 +1,14 @@
|
||||||
|
from signal import SIGTERM, signal
|
||||||
|
from pidfile import delete_pidfile, pidfile_name, create_pidfile
|
||||||
from SignalRouter import SignalRouter
|
from SignalRouter import SignalRouter
|
||||||
from Bar import Bar
|
from Bar import Bar
|
||||||
from Module import Module
|
from Module import Module
|
||||||
from parse_config_file import get_bar_config_and_module_config_list
|
from parse_config_file import get_bar_config_and_module_config_list
|
||||||
|
|
||||||
|
def sigterm_handler(signal, frame):
|
||||||
|
delete_pidfile(pidfile_name())
|
||||||
|
exit()
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
bar_config, module_config_list = get_bar_config_and_module_config_list("./data/testing_config.yml")
|
bar_config, module_config_list = get_bar_config_and_module_config_list("./data/testing_config.yml")
|
||||||
padding = bar_config["padding"]
|
padding = bar_config["padding"]
|
||||||
|
@ -20,7 +26,9 @@ def main():
|
||||||
if module.signal != 0:
|
if module.signal != 0:
|
||||||
signal_router.register_signal_thread(module.signal, module.ident)
|
signal_router.register_signal_thread(module.signal, module.ident)
|
||||||
|
|
||||||
|
create_pidfile(pidfile_name())
|
||||||
|
|
||||||
|
signal(SIGTERM, sigterm_handler)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
14
easyconf-lemonbar/pidfile.py
Normal file
14
easyconf-lemonbar/pidfile.py
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
from os import chmod, getpid, getuid, remove
|
||||||
|
|
||||||
|
def pidfile_name():
|
||||||
|
filepath = "/run/user/" + str(getuid()) + "/easyconf-lemonbar.pid"
|
||||||
|
return filepath
|
||||||
|
|
||||||
|
|
||||||
|
def create_pidfile(filepath):
|
||||||
|
with open(filepath, "w") as file:
|
||||||
|
file.write(str(getpid()))
|
||||||
|
chmod(filepath, 0o644)
|
||||||
|
|
||||||
|
def delete_pidfile(filepath):
|
||||||
|
remove(filepath)
|
Loading…
Reference in a new issue