diff options
Diffstat (limited to 'ttystatus/status.py')
-rw-r--r-- | ttystatus/status.py | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/ttystatus/status.py b/ttystatus/status.py index 8365017..b0b93dd 100644 --- a/ttystatus/status.py +++ b/ttystatus/status.py @@ -72,12 +72,31 @@ class TerminalStatus(object): for w in self._widgets: w.update(self) if self._m.time_to_write(): - self._render() + self._write() def _render(self): - '''Format and output all widgets.''' - self._m.write(''.join(w.render(1) for w in self._widgets)) - + '''Render current state of all widgets.''' + + remaining = self._m.width + + texts = [None] * len(self._widgets) + + for i, w in enumerate(self._widgets): + if w.static_width: + texts[i] = w.render(0) + remaining -= len(texts[i]) + + for i, w in enumerate(self._widgets): + if not w.static_width: + texts[i] = w.render(remaining) + remaining -= len(texts[i]) + + return ''.join(texts) + + def _write(self): + '''Render and output current state of all widgets.''' + self._m.write(self._render()) + def increase(self, key, delta): '''Increase value for a key by a given amount.''' self[key] = (self[key] or 0) + delta @@ -92,7 +111,7 @@ class TerminalStatus(object): def finish(self): '''Finish status display.''' - self._render() + self._write() self._m.finish() def disable(self): |