summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2015-10-20 23:36:38 +0300
committerLars Wirzenius <liw@liw.fi>2015-10-20 23:36:38 +0300
commite32552cf8630bb1ffa01e51fe010523ca818bd67 (patch)
tree2054218c62b931ce9d4edd63f26e87318a72bce6
parentd2e8af297cffdd52e1487ec3f12edc625e6dde06 (diff)
downloadttystatus-e32552cf8630bb1ffa01e51fe010523ca818bd67.tar.gz
Only erase unwritten parts of screen
This avoids some unpleasant flickering when there's frequent updates.
-rw-r--r--ttystatus/area.py4
-rw-r--r--ttystatus/tty.py7
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.