From 5a882d1faed150988b729f3f3ad78a713a3bc99b Mon Sep 17 00:00:00 2001 From: kuben Date: Tue, 24 Dec 2019 13:01:41 +0100 Subject: [PATCH] lemonbar: Create DateTimeModule using python time function --- .i3/lemonbar/i3_lemonbar_modules.py | 192 +++++++++++++++------------- 1 file changed, 101 insertions(+), 91 deletions(-) diff --git a/.i3/lemonbar/i3_lemonbar_modules.py b/.i3/lemonbar/i3_lemonbar_modules.py index 7c792e8..2cbadd9 100644 --- a/.i3/lemonbar/i3_lemonbar_modules.py +++ b/.i3/lemonbar/i3_lemonbar_modules.py @@ -1,7 +1,8 @@ import threading import subprocess import contextlib -import os, signal, getpass +import time, os, signal, getpass +import queue import i3_lemonbar_config as config import i3_lemonbar_common as common @@ -71,25 +72,80 @@ def format_load(data, module, alert): module.alt_scheme = None return (d_v, u_v) -class ConkyFastModule(LemonModule): - # TODO use internal python stuff for stuff like clock, then raise update interval - if os.uname()[1] == 'kubaDesktop': - conky_config = """ -conky.config = { - background=false, - update_interval=0.2, - total_run_times=0, - override_utf8_locale=true, - short_units=true, - uppercase=false, - out_to_console=true, - out_to_x=false, - if_up_strictness='address', - format_human_readable=true, -} +class DateTimeModule(LemonModule): + def __init__(self): + self.show_secs = False + super().__init__() + def _start_module(self): + class DateTimeThread(threading.Thread): + def __init__(self): + self.last_out = '' + self.out_queue = queue.Queue() + self.out_queue.readline = self.out_queue.get + super().__init__() + + def run(self): + while True: + timestr = time.strftime("%a %d %b %H:%M:%S", time.gmtime()) + if timestr != self.last_out: + self.last_out = timestr + self.out_queue.put('{}\n'.format(timestr)) + time.sleep(0.1) + + self.dt_thread = DateTimeThread() + self.dt_thread.start() + self.status_handle = self.dt_thread.out_queue + + self.date = parser.IconTextUnit('date', action='date', order=40) + self.time = parser.IconTextUnit('time', action='toggle_secs', order=41 + , alt_scheme=parser.COLOR_SCHEME.SPECIAL) + 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('toggle_secs' , self.toggle_secs) + + def _stop_module(self): + if self.p_handle is not None: + self.p_handle.terminate() + + parser.g_parser.remove_unit(self.date) + parser.g_parser.remove_unit(self.time) + + def _parse_data(self, data): + # Date and time + self.date.items = [(config.icon_clock, ' '.join(data[0:3]))] + self.time.items = [('', data[3] if self.show_secs else data[3][:-3])] + + def date_comm(self): + subprocess.Popen(['yad', '--no-buttons', '--calendar', '--sticky' + , '--on-top' , '--class' , '"YADWIN"', '--posx=1650', '--posy=24' + , '--close-on-unfocus']) + + def toggle_secs(self): + self.show_secs = not self.show_secs + +class ConkyFastModule(LemonModule): + conky_config_str = """ +conky.config = { + background=false, + update_interval=1, + total_run_times=0, + override_utf8_locale=true, + short_units=true, + uppercase=false, + out_to_console=true, + out_to_x=false, + if_up_strictness='address', + format_human_readable=true, +} +""" + if os.uname()[1] == 'kubaDesktop': + conky_config = conky_config_str + """ conky.text = [[ -${time %a %d %b %H:%M:%S} \ ${exec ~/.i3/lemonbar/get_vol.sh} \ down down\ \ @@ -99,22 +155,8 @@ ${else}down down${endif}\ ]] """ else: - conky_config = """ -conky.config = { - background=false, - update_interval=0.2, - total_run_times=0, - override_utf8_locale=true, - short_units=true, - uppercase=false, - out_to_console=true, - out_to_x=false, - if_up_strictness='address', - format_human_readable=true, -} - + conky_config = conky_config_str + """ conky.text = [[ -${time %a %d %b %H:%M:%S} \ ${exec ~/.i3/lemonbar/get_vol.sh} \ ${if_up wlp3s0}${downspeedf wlp3s0} ${upspeedf wlp3s0}\ ${else}down down${endif}\ @@ -125,7 +167,6 @@ ${else}down down${endif}\ ]] """ def __init__(self): - self.show_secs = False super().__init__() def _start_module(self): @@ -138,21 +179,13 @@ ${else}down down${endif}\ self.wlan_load = parser.IconTextUnit('wlan_load', action='wlan', order=13) self.eth_load = parser.IconTextUnit('eth_load', action='eth', order=14) self.volume = parser.IconTextUnit('volume', action='pavu', order=20) - self.date = parser.IconTextUnit('date', action='date', order=40) - self.time = parser.IconTextUnit('time', action='toggle_secs', order=41 - , alt_scheme=parser.COLOR_SCHEME.SPECIAL) - self.time.modes = [mode for mode in common.bar_mode] parser.g_parser.register_unit(self.wlan_load) parser.g_parser.register_unit(self.eth_load) parser.g_parser.register_unit(self.volume) - parser.g_parser.register_unit(self.date) - parser.g_parser.register_unit(self.time) self.register_action('wlan' , self.nmtui) self.register_action('pavu' , self.pavu) - self.register_action('date' , self.date_comm) - self.register_action('toggle_secs' , self.toggle_secs) def _stop_module(self): if self.p_handle is not None: @@ -161,30 +194,24 @@ ${else}down down${endif}\ parser.g_parser.remove_unit(self.wlan_load) parser.g_parser.remove_unit(self.eth_load) parser.g_parser.remove_unit(self.volume) - parser.g_parser.remove_unit(self.date) - parser.g_parser.remove_unit(self.time) def _parse_data(self, data): # wlan and eth - (wland_v, wlanu_v) = format_load(data[5:7], self.wlan_load, config.net_alert) + (wland_v, wlanu_v) = format_load(data[1:3], self.wlan_load, config.net_alert) self.wlan_load.items = [(config.icon_wlan + config.icon_dl, wland_v) ,(config.icon_ul, wlanu_v)] - (ethd_v, ethu_v) = format_load(data[7:9], self.eth_load, config.net_alert) + (ethd_v, ethu_v) = format_load(data[3:5], self.eth_load, config.net_alert) self.eth_load.items = [(config.icon_eth + config.icon_dl, ethd_v) ,(config.icon_ul, ethu_v)] # Volume - mute = data[4] == 'MUTE' or data[4] == 'NONE' - (vol,vols) = (-1,'×') if mute else (int(data[4]), data[4]+'%') + mute = data[0] == 'MUTE' or data[0] == 'NONE' + (vol,vols) = (-1,'×') if mute else (int(data[0]), data[0]+'%') icon_v = config.icon_vol_mute if vol == 0 else \ config.icon_vol_low if vol < 50 else config.icon_vol self.volume.items = [(icon_v, vols)] - # Date and time - self.date.items = [(config.icon_clock, ' '.join(data[0:3]))] - self.time.items = [('', data[3] if self.show_secs else data[3][:-3])] - def nmtui(self): p = subprocess.Popen(['xterm', '-class', 'FLOAT_TERM', '-e', 'nmtui']) common.kill_on_unfocus.append(p.pid) @@ -193,30 +220,23 @@ ${else}down down${endif}\ p = subprocess.Popen(['pavucontrol', '--class=FLOAT_PAVU']) common.kill_on_unfocus.append(p.pid) - def date_comm(self): - subprocess.Popen(['yad', '--no-buttons', '--calendar', '--sticky' - , '--on-top' , '--class' , '"YADWIN"', '--posx=1650', '--posy=24' - , '--close-on-unfocus']) - - def toggle_secs(self): - self.show_secs = not self.show_secs - class ConkySlowModule(LemonModule): - if os.uname()[1] == 'kubaDesktop': - conky_config = """ + conky_config_str = """ conky.config = { - background=false, - update_interval=5, - total_run_times=0, - override_utf8_locale=true, - short_units=true, - uppercase=false, - out_to_console=true, - out_to_x=false, - if_up_strictness='address', - format_human_readable=true, + background=false, + update_interval=5, + total_run_times=0, + override_utf8_locale=true, + short_units=true, + uppercase=false, + out_to_console=true, + out_to_x=false, + if_up_strictness='address', + format_human_readable=true, } - +""" + if os.uname()[1] == 'kubaDesktop': + conky_config = conky_config_str + """ conky.text = [[ ${cpu} \ ${mem} \ @@ -228,21 +248,7 @@ ${exec /home/kuba/.i3/scripts/lang.sh show} ]] """ else: - conky_config = """ - -conky.config = { - background=false, - update_interval=5, - total_run_times=0, - override_utf8_locale=true, - short_units=true, - uppercase=false, - out_to_console=true, - out_to_x=false, - if_up_strictness='address', - format_human_readable=true, -} - + conky_config = conky_config_str + """ conky.text = [[ ${cpu} \ ${mem} \ @@ -641,33 +647,37 @@ class PowerOptionsModule(LemonModule): , ', (r) reboot, (Shift+s) shutdown']) def do_action(keyword): - global m_conky_fast, m_conky_slow, m_i3ws + global m_datetime, m_conky_fast, m_conky_slow, m_i3ws m_i3ws.do_action(keyword) + m_datetime.do_action(keyword) m_conky_slow.do_action(keyword) m_conky_fast.do_action(keyword) m_screen.do_action(keyword) m_power.do_action(keyword) def start_all(): - global m_conky_fast, m_conky_slow, m_i3ws, m_screen, m_power + global m_datetime, m_conky_fast, m_conky_slow, m_i3ws, m_screen, m_power m_i3ws = i3Module() + m_datetime = DateTimeModule() m_conky_slow = ConkySlowModule() m_conky_fast = ConkyFastModule() m_screen = ScreenModule() m_power = PowerOptionsModule() m_i3ws.start() + m_datetime.start() m_conky_slow.start() m_conky_fast.start() m_screen.start() m_power.start() def stop_all(): - global m_conky_fast, m_conky_slow, m_i3ws, m_screen, m_power + global m_datetime, m_conky_fast, m_conky_slow, m_i3ws, m_screen, m_power m_i3ws.stop() + m_datetime.stop() m_conky_slow.stop() m_conky_fast.stop() m_screen.stop()