From e32552cf8630bb1ffa01e51fe010523ca818bd67 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Tue, 20 Oct 2015 23:36:38 +0300 Subject: Only erase unwritten parts of screen This avoids some unpleasant flickering when there's frequent updates. --- ttystatus/area.py | 4 +++- ttystatus/tty.py | 7 +++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ttystatus/area.py b/ttystatus/area.py index c4e1aab..4e59fd8 100644 --- a/ttystatus/area.py +++ b/ttystatus/area.py @@ -51,6 +51,7 @@ class AreaManager(object): max_chars = self.get_max_line_length() up = self._terminal.get_up_sequence() down = self._terminal.get_down_sequence() + cr = self._terminal.get_carriage_return_sequence() erase = self._terminal.get_erase_line_sequence() lines = message.split('\n') @@ -58,8 +59,9 @@ class AreaManager(object): for i, line in enumerate(message.split('\n')): if i > 0: parts.append(down) - parts.append(erase) + parts.append(cr) parts.append(line[:max_chars]) + parts.append(erase) self._terminal.write(''.join(parts)) diff --git a/ttystatus/tty.py b/ttystatus/tty.py index db0962a..83561b6 100644 --- a/ttystatus/tty.py +++ b/ttystatus/tty.py @@ -57,10 +57,13 @@ class PhysicalTerminal(object): assert self._cud is not None return self._cud - def get_erase_line_sequence(self): + def get_carriage_return_sequence(self): assert self._cr is not None + return self._cr + + def get_erase_line_sequence(self): assert self._el is not None - return self._cr + self._el + return self._el def get_size(self): '''Return width, height of terminal in characters, rows. -- cgit v1.2.1