Source code for i3pystatus.anybar
import threading
import socket
from i3pystatus import IntervalModule
[docs]class AnyBar(IntervalModule):
"""
This module shows dot with given color in your panel.
What color means is up to you. When to change color is also up to you.
It's a port of https://github.com/tonsky/AnyBar to i3pystatus.
Color can be changed by sending text to UDP port.
Check the original repo how to do it.
"""
colors = {
"black": "#444444", # 4C4C4C
"black_alt": "#FFFFFF",
"blue": "#4A90E2",
"cyan": "#27F2CB",
"exclamation": "#DE504C", # vary
"green": "#80EB0C",
"orange": "#FF9F00",
"purple": "#9013FE",
"question": "#4C4C4C", # vary
"question_alt": "#FFFFFF",
"red": "#CF0700",
"white": "#4C4C4C", # border
"white_alt": "#FFFFFF",
"yellow": "#FFEC00",
}
color = '#444444'
port = 1738
interval = 1
settings = (
("port", "UDP port to listen"),
("color", "initial color"),
)
[docs] def main_loop(self):
""" Mainloop blocks so we thread it."""
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
port = int(getattr(self, 'port', 1738))
sock.bind(('127.0.0.1', port))
while True:
data, addr = sock.recvfrom(512)
color = data.decode().strip()
self.color = self.colors.get(color, color)
def init(self):
try:
t = threading.Thread(target=self.main_loop)
t.daemon = True
t.start()
except Exception as e:
self.output = {
"full_text": "Error creating new thread!",
"color": "#AE2525"
}
def run(self):
self.output = {
"full_text": "●",
"color": self.color
}