summaryrefslogtreecommitdiff
path: root/urwid/vterm.py
diff options
context:
space:
mode:
authoraszlig <aszlig@redmoonstudios.org>2010-07-05 08:16:23 +0200
committeraszlig <aszlig@redmoonstudios.org>2010-07-05 08:16:23 +0200
commitffc54837c538dde35f0595d194a40f0745f13bc1 (patch)
treed1d39f75079353ac20012f9fb7fc6c89ddfd6ecf /urwid/vterm.py
parentfc773808eaeca5048813ede80102544ce73aa6db (diff)
downloadurwid-ffc54837c538dde35f0595d194a40f0745f13bc1.tar.gz
vterm: Truncate scrolling buffer as necessary.
Diffstat (limited to 'urwid/vterm.py')
-rw-r--r--urwid/vterm.py25
1 files changed, 24 insertions, 1 deletions
diff --git a/urwid/vterm.py b/urwid/vterm.py
index 32d6090..63f130f 100644
--- a/urwid/vterm.py
+++ b/urwid/vterm.py
@@ -171,6 +171,29 @@ class TermCharset(object):
else:
self.current = None
+class TermScroller(list):
+ """
+ List subclass that handles the terminal scrollback buffer,
+ truncating it as necessary.
+ """
+ SCROLLBACK_LINES = 10000
+
+ def trunc(self):
+ if len(self) >= self.SCROLLBACK_LINES:
+ self.pop(0)
+
+ def append(self, obj):
+ self.trunc()
+ super(TermScroller, self).append(obj)
+
+ def insert(self, idx, obj):
+ self.trunc()
+ super(TermScroller, self).insert(idx, obj)
+
+ def extend(self, seq):
+ self.trunc()
+ super(TermScroller, self).extend(seq)
+
class TermCanvas(Canvas):
cacheable = False
@@ -181,7 +204,7 @@ class TermCanvas(Canvas):
self.widget = widget
self.modes = widget.term_modes
- self.scrollback_buffer = []
+ self.scrollback_buffer = TermScroller()
self.scrolling_up = 0
self.utf8_eat_bytes = None