diff --git a/.i3/lemonbar/i3_lemonbar_modules.py b/.i3/lemonbar/i3_lemonbar_modules.py index 721e7c3..915a890 100644 --- a/.i3/lemonbar/i3_lemonbar_modules.py +++ b/.i3/lemonbar/i3_lemonbar_modules.py @@ -414,7 +414,10 @@ class i3Module(LemonModule): common.logger.info('Started module {}'.format(self.__class__.__name__)) common.health_logger.info('Module {} up'.format(self.__class__.__name__)) - self.i3_ws_obj.work() # This is a blocking command + try: + self.i3_ws_obj.work() # This is a blocking command + except ConnectionError: + common.logger.info('i3ws failed connecting to i3 socket') common.logger.info('Reached end of module {}'.format(self.__class__.__name__)) common.health_logger.info('Module {} down'.format(self.__class__.__name__)) @@ -533,7 +536,7 @@ class i3Module(LemonModule): else: new_km = self.def_keymap common.logger.debug('Setting default keymap {} for {}'.format(new_km, wclass)) - subprocess.call(['/home/kuba/.i3/scripts/lang.sh', 'qset', new_km]) + subprocess.call(['/home/kuba/.i3/scripts/lang.sh', 'qset', new_km]) # TODO it is this script that writes to fifo, triggering the formatting def i3msg_comm(self, *cmd): self.i3_ws_obj.command(' '.join(cmd)) diff --git a/.i3/lemonbar/i3_workspaces.py b/.i3/lemonbar/i3_workspaces.py index 5bbf84e..31709ff 100755 --- a/.i3/lemonbar/i3_workspaces.py +++ b/.i3/lemonbar/i3_workspaces.py @@ -68,10 +68,21 @@ class i3ws(object): self.logger.debug('Started i3 workspaces manager') self.enterMain() self.logger.debug('Finished i3 workspaces manager') - time.sleep(0.5) # TODO max number of attempts + catch exception instead def resetConn(self): - self.conn = i3ipc.Connection() + + def attempt_connection(attempt): + try: + self.conn = i3ipc.Connection() + except FileNotFoundError: + # Thrown when i3 is not up. Should try again in the case of a restart + self.logger.debug('Attempt {}: Failed connecting to i3 socket'.format(attempt)) + if attempt > 5: + raise ConnectionError('Could not connect to i3 socked, quitting') + time.sleep(0.1 if attempt < 3 else 0.5) + attempt_connection(attempt + 1) + + attempt_connection(attempt=1) self.outputs = self.conn.get_outputs() self.conn.on('workspace::focus' , self.change)