From d2c70b7e98744ac0e0a62b72d9b56ab4d67832fb Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Sat, 16 Oct 2010 12:10:12 +0200 Subject: [PATCH] in a tty, ask user to press when text exceed the term height --- weboob/applications/radioob/radioob.py | 7 ----- weboob/applications/videoob/videoob.py | 7 ----- .../applications/weboorrents/weboorrents.py | 14 ---------- .../application/formatters/iformatter.py | 26 +++++++++++++++++-- .../tools/application/formatters/multiline.py | 3 --- weboob/tools/application/formatters/simple.py | 7 ----- 6 files changed, 24 insertions(+), 40 deletions(-) diff --git a/weboob/applications/radioob/radioob.py b/weboob/applications/radioob/radioob.py index da408a4d..c9a19ad7 100644 --- a/weboob/applications/radioob/radioob.py +++ b/weboob/applications/radioob/radioob.py @@ -29,9 +29,6 @@ __all__ = ['Radioob'] class RadioListFormatter(IFormatter): count = 0 - def after_format(self, formatted): - print formatted.encode('utf-8') - def flush(self): self.count = 0 pass @@ -48,10 +45,6 @@ class RadioListFormatter(IFormatter): result += ' (Current: %s - %s)' % (item['current'].artist, item['current'].title) return result - def set_header(self, string): - if self.display_header: - print string.encode('utf-8') - class Radioob(ReplApplication): APPNAME = 'radioob' VERSION = '0.3' diff --git a/weboob/applications/videoob/videoob.py b/weboob/applications/videoob/videoob.py index dacc8248..ef2e6228 100644 --- a/weboob/applications/videoob/videoob.py +++ b/weboob/applications/videoob/videoob.py @@ -29,9 +29,6 @@ __all__ = ['Videoob'] class VideoListFormatter(IFormatter): count = 0 - def after_format(self, formatted): - print formatted.encode('utf-8') - def flush(self): self.count = 0 pass @@ -50,10 +47,6 @@ class VideoListFormatter(IFormatter): result += u' (%s/%s)' % (item['rating'], item['rating_max']) return result - def set_header(self, string): - if self.display_header: - print string.encode('utf-8') - class Videoob(ReplApplication): APPNAME = 'videoob' VERSION = '0.3' diff --git a/weboob/applications/weboorrents/weboorrents.py b/weboob/applications/weboorrents/weboorrents.py index faae8c2a..05e3ece7 100644 --- a/weboob/applications/weboorrents/weboorrents.py +++ b/weboob/applications/weboorrents/weboorrents.py @@ -33,9 +33,6 @@ def sizeof_fmt(num): num /= 1024.0 class TorrentInfoFormatter(IFormatter): - def after_format(self, formatted): - print formatted.encode('utf-8') - def flush(self): pass @@ -53,16 +50,9 @@ class TorrentInfoFormatter(IFormatter): result += item['description'] return result - def set_header(self, string): - if self.display_header: - print string.encode('utf-8') - class TorrentListFormatter(IFormatter): count = 0 - def after_format(self, formatted): - print formatted.encode('utf-8') - def flush(self): self.count = 0 pass @@ -78,10 +68,6 @@ class TorrentListFormatter(IFormatter): result += ' %10s (Seed: %2d / Leech: %2d)' % (size, item['seeders'], item['leechers']) return result - def set_header(self, string): - if self.display_header: - print string.encode('utf-8') - class Weboorrents(ReplApplication): APPNAME = 'weboorrents' VERSION = '0.3' diff --git a/weboob/tools/application/formatters/iformatter.py b/weboob/tools/application/formatters/iformatter.py index f6c9a7e5..afc8c737 100644 --- a/weboob/tools/application/formatters/iformatter.py +++ b/weboob/tools/application/formatters/iformatter.py @@ -16,6 +16,9 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +import os +import sys + from weboob.capabilities.base import CapBaseObject, FieldNotFound from weboob.tools.ordereddict import OrderedDict @@ -29,9 +32,27 @@ class IFormatter(object): self.display_header = display_header self.return_only = return_only self.interactive = False + self.print_lines = 0 + self.termrows = 0 + self.termcols = 0 + if os.isatty(sys.stdout.fileno()): + size = os.popen('stty size', 'r').read().split() + self.termrows = int(size[0]) + self.termcols = int(size[1]) def after_format(self, formatted): - raise NotImplementedError() + for line in formatted.split('\n'): + if self.termrows and (self.print_lines + 1) >= self.termrows: + prompt = '--Press return to continue--' + sys.stdout.write(prompt) + sys.stdout.flush() + r = sys.stdin.readline() + self.print_lines = 0 + + if isinstance(line, unicode): + line = line.encode('utf-8') + print line + self.print_lines += 1 def build_id(self, v, backend_name): return u'%s@%s' % (unicode(v), backend_name) @@ -80,7 +101,8 @@ class IFormatter(object): raise NotImplementedError() def set_header(self, string): - raise NotImplementedError() + if self.display_header: + print string.encode('utf-8') def to_dict(self, obj, condition=None, selected_fields=None): def iter_select_and_decorate(d): diff --git a/weboob/tools/application/formatters/multiline.py b/weboob/tools/application/formatters/multiline.py index 623606eb..39d488e0 100644 --- a/weboob/tools/application/formatters/multiline.py +++ b/weboob/tools/application/formatters/multiline.py @@ -29,9 +29,6 @@ class MultilineFormatter(IFormatter): self.key_value_separator = key_value_separator self.after_item = after_item - def after_format(self, formatted): - print formatted.encode('utf-8') - def flush(self): pass diff --git a/weboob/tools/application/formatters/simple.py b/weboob/tools/application/formatters/simple.py index e42c76b3..92790b93 100644 --- a/weboob/tools/application/formatters/simple.py +++ b/weboob/tools/application/formatters/simple.py @@ -28,9 +28,6 @@ class SimpleFormatter(IFormatter): self.field_separator = field_separator self.key_value_separator = key_value_separator - def after_format(self, formatted): - print formatted.encode('utf-8') - def flush(self): pass @@ -38,7 +35,3 @@ class SimpleFormatter(IFormatter): return self.field_separator.join(u'%s%s' % ( (u'%s%s' % (k, self.key_value_separator) if self.display_keys else ''), v) for k, v in item.iteritems()) - - def set_header(self, string): - if self.display_header: - print string.encode('utf-8')