lemonbar: Automatically register and remove units
This commit is contained in:
@@ -14,11 +14,21 @@ class LemonModule(threading.Thread):
|
|||||||
# sends to lemonbar queue. On click actions are registered with the module.
|
# sends to lemonbar queue. On click actions are registered with the module.
|
||||||
# Every module runs in its own thread
|
# Every module runs in its own thread
|
||||||
|
|
||||||
|
def units(self):
|
||||||
|
# Iterate over units
|
||||||
|
for _, attr_instance in self.__dict__.items():
|
||||||
|
if isinstance(attr_instance, parser.LemonUnit):
|
||||||
|
yield attr_instance
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.actions = {}
|
self.actions = {}
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self._start_module()
|
self._start_module()
|
||||||
|
|
||||||
|
for unit in self.units():
|
||||||
|
parser.g_parser.register_unit(unit)
|
||||||
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
if self.status_handle is None:
|
if self.status_handle is None:
|
||||||
return
|
return
|
||||||
@@ -38,6 +48,9 @@ class LemonModule(threading.Thread):
|
|||||||
def stop(self):
|
def stop(self):
|
||||||
self._stop_module()
|
self._stop_module()
|
||||||
|
|
||||||
|
for unit in self.units():
|
||||||
|
parser.g_parser.remove_unit(unit)
|
||||||
|
|
||||||
def parse(self, line):
|
def parse(self, line):
|
||||||
data = line.split()
|
data = line.split()
|
||||||
self._parse_data(data) # Update correct field
|
self._parse_data(data) # Update correct field
|
||||||
@@ -120,8 +133,6 @@ class DateTimeModule(LemonModule):
|
|||||||
, alt_scheme=parser.COLOR_SCHEME.SPECIAL)
|
, alt_scheme=parser.COLOR_SCHEME.SPECIAL)
|
||||||
self.time.modes = [mode for mode in common.bar_mode]
|
self.time.modes = [mode for mode in common.bar_mode]
|
||||||
|
|
||||||
parser.g_parser.register_unit(self.date)
|
|
||||||
parser.g_parser.register_unit(self.time)
|
|
||||||
|
|
||||||
self.register_action('date' , self.date_comm)
|
self.register_action('date' , self.date_comm)
|
||||||
self.register_action('toggle_secs' , self.toggle_secs)
|
self.register_action('toggle_secs' , self.toggle_secs)
|
||||||
@@ -130,8 +141,6 @@ class DateTimeModule(LemonModule):
|
|||||||
if self.p_handle is not None:
|
if self.p_handle is not None:
|
||||||
self.p_handle.terminate()
|
self.p_handle.terminate()
|
||||||
|
|
||||||
parser.g_parser.remove_unit(self.date)
|
|
||||||
parser.g_parser.remove_unit(self.time)
|
|
||||||
|
|
||||||
def _parse_data(self, data):
|
def _parse_data(self, data):
|
||||||
# Date and time
|
# Date and time
|
||||||
@@ -199,9 +208,6 @@ ${else}down down${endif}\
|
|||||||
self.eth_load = parser.IconTextUnit('eth_load', action='eth', order=14)
|
self.eth_load = parser.IconTextUnit('eth_load', action='eth', order=14)
|
||||||
self.volume = parser.IconTextUnit('volume', action='pavu', order=20)
|
self.volume = parser.IconTextUnit('volume', action='pavu', order=20)
|
||||||
|
|
||||||
parser.g_parser.register_unit(self.wlan_load)
|
|
||||||
parser.g_parser.register_unit(self.eth_load)
|
|
||||||
parser.g_parser.register_unit(self.volume)
|
|
||||||
|
|
||||||
self.register_action('wlan' , self.nmtui)
|
self.register_action('wlan' , self.nmtui)
|
||||||
self.register_action('pavu' , self.pavu)
|
self.register_action('pavu' , self.pavu)
|
||||||
@@ -210,9 +216,6 @@ ${else}down down${endif}\
|
|||||||
if self.p_handle is not None:
|
if self.p_handle is not None:
|
||||||
self.p_handle.terminate()
|
self.p_handle.terminate()
|
||||||
|
|
||||||
parser.g_parser.remove_unit(self.wlan_load)
|
|
||||||
parser.g_parser.remove_unit(self.eth_load)
|
|
||||||
parser.g_parser.remove_unit(self.volume)
|
|
||||||
|
|
||||||
def _parse_data(self, data):
|
def _parse_data(self, data):
|
||||||
# wlan and eth
|
# wlan and eth
|
||||||
@@ -297,11 +300,6 @@ ${exec /home/kuba/.i3/scripts/lang.sh show}
|
|||||||
self.language = parser.IconTextUnit('language', action='lang', order=32
|
self.language = parser.IconTextUnit('language', action='lang', order=32
|
||||||
, external={'LANG': self.parse_language})
|
, external={'LANG': self.parse_language})
|
||||||
|
|
||||||
parser.g_parser.register_unit(self.sys_load)
|
|
||||||
parser.g_parser.register_unit(self.disk)
|
|
||||||
parser.g_parser.register_unit(self.brightness)
|
|
||||||
parser.g_parser.register_unit(self.battery)
|
|
||||||
parser.g_parser.register_unit(self.language)
|
|
||||||
|
|
||||||
self.register_action('load' , self.htop)
|
self.register_action('load' , self.htop)
|
||||||
self.register_action('lang' , self.lang_comm)
|
self.register_action('lang' , self.lang_comm)
|
||||||
@@ -309,11 +307,6 @@ ${exec /home/kuba/.i3/scripts/lang.sh show}
|
|||||||
self.register_action('dpms' , self.dpms_comm)
|
self.register_action('dpms' , self.dpms_comm)
|
||||||
|
|
||||||
def _stop_module(self):
|
def _stop_module(self):
|
||||||
parser.g_parser.remove_unit(self.sys_load)
|
|
||||||
parser.g_parser.remove_unit(self.disk)
|
|
||||||
parser.g_parser.remove_unit(self.brightness)
|
|
||||||
parser.g_parser.remove_unit(self.battery)
|
|
||||||
parser.g_parser.remove_unit(self.language)
|
|
||||||
|
|
||||||
if self.p_handle is not None:
|
if self.p_handle is not None:
|
||||||
self.p_handle.terminate()
|
self.p_handle.terminate()
|
||||||
@@ -393,9 +386,6 @@ class i3Module(LemonModule):
|
|||||||
self.displays.modes.append(common.bar_mode.control)
|
self.displays.modes.append(common.bar_mode.control)
|
||||||
self.workspaces.modes.append(common.bar_mode.control)
|
self.workspaces.modes.append(common.bar_mode.control)
|
||||||
|
|
||||||
parser.g_parser.register_unit(self.displays)
|
|
||||||
parser.g_parser.register_unit(self.workspaces)
|
|
||||||
parser.g_parser.register_unit(self.title)
|
|
||||||
|
|
||||||
self.register_action('i3-msg' , self.i3msg_comm)
|
self.register_action('i3-msg' , self.i3msg_comm)
|
||||||
self.register_action('mode' , self.set_mode)
|
self.register_action('mode' , self.set_mode)
|
||||||
@@ -411,9 +401,6 @@ class i3Module(LemonModule):
|
|||||||
self.i3_ws_obj.focus_callbacks.append(self.kill_floating_windows)
|
self.i3_ws_obj.focus_callbacks.append(self.kill_floating_windows)
|
||||||
|
|
||||||
def _stop_module(self):
|
def _stop_module(self):
|
||||||
parser.g_parser.remove_unit(self.displays)
|
|
||||||
parser.g_parser.remove_unit(self.workspaces)
|
|
||||||
parser.g_parser.remove_unit(self.title)
|
|
||||||
|
|
||||||
if self.i3_ws_obj is not None:
|
if self.i3_ws_obj is not None:
|
||||||
self.i3_ws_obj.quit()
|
self.i3_ws_obj.quit()
|
||||||
@@ -591,8 +578,6 @@ class ScreenModule(LemonModule):
|
|||||||
self.response.modes = [common.bar_mode.control]
|
self.response.modes = [common.bar_mode.control]
|
||||||
self.controls.modes = [common.bar_mode.control]
|
self.controls.modes = [common.bar_mode.control]
|
||||||
|
|
||||||
parser.g_parser.register_unit(self.response)
|
|
||||||
parser.g_parser.register_unit(self.controls)
|
|
||||||
|
|
||||||
self.register_action('bluetooth', self.bluetooth)
|
self.register_action('bluetooth', self.bluetooth)
|
||||||
|
|
||||||
@@ -601,8 +586,6 @@ class ScreenModule(LemonModule):
|
|||||||
self.status_handle.close()
|
self.status_handle.close()
|
||||||
with contextlib.suppress(FileNotFoundError):
|
with contextlib.suppress(FileNotFoundError):
|
||||||
os.remove(config.fifo_screen_log)
|
os.remove(config.fifo_screen_log)
|
||||||
parser.g_parser.remove_unit(self.response)
|
|
||||||
parser.g_parser.remove_unit(self.controls)
|
|
||||||
|
|
||||||
def _parse_data(self, data):
|
def _parse_data(self, data):
|
||||||
line = ' '.join(data)
|
line = ' '.join(data)
|
||||||
@@ -652,10 +635,9 @@ class PowerOptionsModule(LemonModule):
|
|||||||
|
|
||||||
self.power_opts.modes = [common.bar_mode.power]
|
self.power_opts.modes = [common.bar_mode.power]
|
||||||
|
|
||||||
parser.g_parser.register_unit(self.power_opts)
|
|
||||||
|
|
||||||
def _stop_module(self):
|
def _stop_module(self):
|
||||||
parser.g_parser.remove_unit(self.power_opts)
|
pass
|
||||||
|
|
||||||
def _parse_data(self, data):
|
def _parse_data(self, data):
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -9,7 +9,12 @@ slr = config.sep_l_right
|
|||||||
sl = config.sep_left
|
sl = config.sep_left
|
||||||
sll = config.sep_l_left
|
sll = config.sep_l_left
|
||||||
|
|
||||||
class IconTextUnit:
|
class LemonUnit:
|
||||||
|
def __lt__(self, other):
|
||||||
|
return self.order < other.order
|
||||||
|
|
||||||
|
|
||||||
|
class IconTextUnit(LemonUnit):
|
||||||
def __init__(self, name, order, action = None, alt_scheme=None, external=None):
|
def __init__(self, name, order, action = None, alt_scheme=None, external=None):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.action = action
|
self.action = action
|
||||||
@@ -52,10 +57,7 @@ class IconTextUnit:
|
|||||||
blocks.append(close)
|
blocks.append(close)
|
||||||
return ''.join(blocks)
|
return ''.join(blocks)
|
||||||
|
|
||||||
def __lt__(self, other):
|
class ButtonsUnit(LemonUnit):
|
||||||
return self.order < other.order
|
|
||||||
|
|
||||||
class ButtonsUnit:
|
|
||||||
def __init__(self, name, order, alt_scheme=None, external=None):
|
def __init__(self, name, order, alt_scheme=None, external=None):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.order = order
|
self.order = order
|
||||||
@@ -86,10 +88,7 @@ class ButtonsUnit:
|
|||||||
|
|
||||||
return ''.join(blocks)
|
return ''.join(blocks)
|
||||||
|
|
||||||
def __lt__(self, other):
|
class CustomUnit(LemonUnit):
|
||||||
return self.order < other.order
|
|
||||||
|
|
||||||
class CustomUnit:
|
|
||||||
def __init__(self, name, format_function, order, action = None, alt_scheme=None, external=None):
|
def __init__(self, name, format_function, order, action = None, alt_scheme=None, external=None):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.action = action
|
self.action = action
|
||||||
@@ -100,9 +99,6 @@ class CustomUnit:
|
|||||||
self.items = [] # List of tuples (icon, text)
|
self.items = [] # List of tuples (icon, text)
|
||||||
self.modes = [common.bar_mode.normal]
|
self.modes = [common.bar_mode.normal]
|
||||||
|
|
||||||
def __lt__(self, other):
|
|
||||||
return self.order < other.order
|
|
||||||
|
|
||||||
class LemonParser:
|
class LemonParser:
|
||||||
# Handle parsing of units
|
# Handle parsing of units
|
||||||
# Apply alternating colors
|
# Apply alternating colors
|
||||||
|
|||||||
Reference in New Issue
Block a user