summary refs log tree commit diff stats
path: root/ranger/gui/widgets/pager.py
diff options
context:
space:
mode:
Diffstat (limited to 'ranger/gui/widgets/pager.py')
-rw-r--r--ranger/gui/widgets/pager.py398
1 files changed, 199 insertions, 199 deletions
diff --git a/ranger/gui/widgets/pager.py b/ranger/gui/widgets/pager.py
index 6ebde5a9..e9ce8b5c 100644
--- a/ranger/gui/widgets/pager.py
+++ b/ranger/gui/widgets/pager.py
@@ -12,202 +12,202 @@ import ranger.ext.img_display as img_display
 
 # TODO: Scrolling in embedded pager
 class Pager(Widget):
-	source = None
-	source_is_stream = False
-
-	old_source = None
-	old_scroll_begin = 0
-	old_startx = 0
-	need_clear_image = False
-	need_redraw_image = False
-	max_width = None
-	def __init__(self, win, embedded=False):
-		Widget.__init__(self, win)
-		self.embedded = embedded
-		self.scroll_begin = 0
-		self.startx = 0
-		self.markup = None
-		self.lines = []
-		self.image = None
-
-	def open(self):
-		self.scroll_begin = 0
-		self.markup = None
-		self.max_width = 0
-		self.startx = 0
-		self.need_redraw = True
-
-	def clear_image(self):
-		if self.need_clear_image:
-			img_display.clear(self.x, self.y, self.wid, self.hei)
-			self.need_clear_image = False
-
-	def close(self):
-		if self.image:
-			self.need_clear_image = True
-			self.clear_image()
-		if self.source and self.source_is_stream:
-			self.source.close()
-
-	def finalize(self):
-		self.fm.ui.win.move(self.y, self.x)
-
-	def draw(self):
-		if self.need_clear_image:
-			self.need_redraw = True
-
-		if self.old_source != self.source:
-			self.old_source = self.source
-			self.need_redraw = True
-
-		if self.old_scroll_begin != self.scroll_begin or \
-				self.old_startx != self.startx:
-			self.old_startx = self.startx
-			self.old_scroll_begin = self.scroll_begin
-
-		if self.need_redraw:
-			self.need_redraw_image = True
-			self.clear_image()
-
-			if not self.image:
-				line_gen = self._generate_lines(
-						starty=self.scroll_begin, startx=self.startx)
-
-				for line, i in zip(line_gen, range(self.hei)):
-					self._draw_line(i, line)
-
-			self.need_redraw = False
-
-	def draw_image(self):
-		if self.image and self.need_redraw_image:
-			self.source = None
-			self.need_redraw_image = False
-			try:
-				img_display.draw(self.image, self.x, self.y, self.wid, self.hei)
-			except Exception as e:
-				self.fm.notify(e, bad=True)
-
-	def _draw_line(self, i, line):
-		if self.markup is None:
-			self.addstr(i, 0, line)
-		elif self.markup == 'ansi':
-			try:
-				self.win.move(i, 0)
-			except:
-				pass
-			else:
-				for chunk in ansi.text_with_fg_bg_attr(line):
-					if isinstance(chunk, tuple):
-						self.set_fg_bg_attr(*chunk)
-					else:
-						self.addstr(chunk)
-
-	def move(self, narg=None, **kw):
-		direction = Direction(kw)
-		if direction.horizontal():
-			self.startx = direction.move(
-					direction=direction.right(),
-					override=narg,
-					maximum=self.max_width,
-					current=self.startx,
-					pagesize=self.wid,
-					offset=-self.wid + 1)
-		if direction.vertical():
-			if self.source_is_stream:
-				self._get_line(self.scroll_begin + self.hei * 2)
-			self.scroll_begin = direction.move(
-					direction=direction.down(),
-					override=narg,
-					maximum=len(self.lines),
-					current=self.scroll_begin,
-					pagesize=self.hei,
-					offset=-self.hei + 1)
-
-	def press(self, key):
-		self.fm.ui.keymaps.use_keymap('pager')
-		self.fm.ui.press(key)
-
-	def set_image(self, image):
-		if self.image:
-			self.need_clear_image = True
-		self.image = image
-
-		if self.source and self.source_is_stream:
-			self.source.close()
-		self.source = None
-		self.source_is_stream = False
-
-	def set_source(self, source, strip=False):
-		if self.image:
-			self.image = None
-			self.need_clear_image = True
-
-		if self.source and self.source_is_stream:
-			self.source.close()
-
-		self.max_width = 0
-		if isinstance(source, str):
-			self.source_is_stream = False
-			self.lines = source.splitlines()
-			if self.lines:
-				self.max_width = max(len(line) for line in self.lines)
-		elif hasattr(source, '__getitem__'):
-			self.source_is_stream = False
-			self.lines = source
-			if self.lines:
-				self.max_width = max(len(line) for line in source)
-		elif hasattr(source, 'readline'):
-			self.source_is_stream = True
-			self.lines = []
-		else:
-			self.source = None
-			self.source_is_stream = False
-			return False
-		self.markup = 'ansi'
-
-		if not self.source_is_stream and strip:
-			self.lines = map(lambda x: x.strip(), self.lines)
-
-		self.source = source
-		return True
-
-	def click(self, event):
-		n = event.ctrl() and 1 or 3
-		direction = event.mouse_wheel_direction()
-		if direction:
-			self.move(down=direction * n)
-		return True
-
-	def _get_line(self, n, attempt_to_read=True):
-		assert isinstance(n, int), n
-		try:
-			return self.lines[n]
-		except (KeyError, IndexError):
-			if attempt_to_read and self.source_is_stream:
-				try:
-					for l in self.source:
-						if len(l) > self.max_width:
-							self.max_width = len(l)
-						self.lines.append(l)
-						if len(self.lines) > n:
-							break
-				except (UnicodeError, IOError):
-					pass
-				return self._get_line(n, attempt_to_read=False)
-			return ""
-
-	def _generate_lines(self, starty, startx):
-		i = starty
-		if not self.source:
-			raise StopIteration
-		while True:
-			try:
-				line = self._get_line(i).expandtabs(4)
-				if self.markup is 'ansi':
-					line = ansi.char_slice(line, startx, self.wid) + ansi.reset
-				else:
-					line = line[startx:self.wid + startx]
-				yield line.rstrip()
-			except IndexError:
-				raise StopIteration
-			i += 1
+    source = None
+    source_is_stream = False
+
+    old_source = None
+    old_scroll_begin = 0
+    old_startx = 0
+    need_clear_image = False
+    need_redraw_image = False
+    max_width = None
+    def __init__(self, win, embedded=False):
+        Widget.__init__(self, win)
+        self.embedded = embedded
+        self.scroll_begin = 0
+        self.startx = 0
+        self.markup = None
+        self.lines = []
+        self.image = None
+
+    def open(self):
+        self.scroll_begin = 0
+        self.markup = None
+        self.max_width = 0
+        self.startx = 0
+        self.need_redraw = True
+
+    def clear_image(self):
+        if self.need_clear_image:
+            img_display.clear(self.x, self.y, self.wid, self.hei)
+            self.need_clear_image = False
+
+    def close(self):
+        if self.image:
+            self.need_clear_image = True
+            self.clear_image()
+        if self.source and self.source_is_stream:
+            self.source.close()
+
+    def finalize(self):
+        self.fm.ui.win.move(self.y, self.x)
+
+    def draw(self):
+        if self.need_clear_image:
+            self.need_redraw = True
+
+        if self.old_source != self.source:
+            self.old_source = self.source
+            self.need_redraw = True
+
+        if self.old_scroll_begin != self.scroll_begin or \
+                self.old_startx != self.startx:
+            self.old_startx = self.startx
+            self.old_scroll_begin = self.scroll_begin
+
+        if self.need_redraw:
+            self.need_redraw_image = True
+            self.clear_image()
+
+            if not self.image:
+                line_gen = self._generate_lines(
+                        starty=self.scroll_begin, startx=self.startx)
+
+                for line, i in zip(line_gen, range(self.hei)):
+                    self._draw_line(i, line)
+
+            self.need_redraw = False
+
+    def draw_image(self):
+        if self.image and self.need_redraw_image:
+            self.source = None
+            self.need_redraw_image = False
+            try:
+                img_display.draw(self.image, self.x, self.y, self.wid, self.hei)
+            except Exception as e:
+                self.fm.notify(e, bad=True)
+
+    def _draw_line(self, i, line):
+        if self.markup is None:
+            self.addstr(i, 0, line)
+        elif self.markup == 'ansi':
+            try:
+                self.win.move(i, 0)
+            except:
+                pass
+            else:
+                for chunk in ansi.text_with_fg_bg_attr(line):
+                    if isinstance(chunk, tuple):
+                        self.set_fg_bg_attr(*chunk)
+                    else:
+                        self.addstr(chunk)
+
+    def move(self, narg=None, **kw):
+        direction = Direction(kw)
+        if direction.horizontal():
+            self.startx = direction.move(
+                    direction=direction.right(),
+                    override=narg,
+                    maximum=self.max_width,
+                    current=self.startx,
+                    pagesize=self.wid,
+                    offset=-self.wid + 1)
+        if direction.vertical():
+            if self.source_is_stream:
+                self._get_line(self.scroll_begin + self.hei * 2)
+            self.scroll_begin = direction.move(
+                    direction=direction.down(),
+                    override=narg,
+                    maximum=len(self.lines),
+                    current=self.scroll_begin,
+                    pagesize=self.hei,
+                    offset=-self.hei + 1)
+
+    def press(self, key):
+        self.fm.ui.keymaps.use_keymap('pager')
+        self.fm.ui.press(key)
+
+    def set_image(self, image):
+        if self.image:
+            self.need_clear_image = True
+        self.image = image
+
+        if self.source and self.source_is_stream:
+            self.source.close()
+        self.source = None
+        self.source_is_stream = False
+
+    def set_source(self, source, strip=False):
+        if self.image:
+            self.image = None
+            self.need_clear_image = True
+
+        if self.source and self.source_is_stream:
+            self.source.close()
+
+        self.max_width = 0
+        if isinstance(source, str):
+            self.source_is_stream = False
+            self.lines = source.splitlines()
+            if self.lines:
+                self.max_width = max(len(line) for line in self.lines)
+        elif hasattr(source, '__getitem__'):
+            self.source_is_stream = False
+            self.lines = source
+            if self.lines:
+                self.max_width = max(len(line) for line in source)
+        elif hasattr(source, 'readline'):
+            self.source_is_stream = True
+            self.lines = []
+        else:
+            self.source = None
+            self.source_is_stream = False
+            return False
+        self.markup = 'ansi'
+
+        if not self.source_is_stream and strip:
+            self.lines = map(lambda x: x.strip(), self.lines)
+
+        self.source = source
+        return True
+
+    def click(self, event):
+        n = event.ctrl() and 1 or 3
+        direction = event.mouse_wheel_direction()
+        if direction:
+            self.move(down=direction * n)
+        return True
+
+    def _get_line(self, n, attempt_to_read=True):
+        assert isinstance(n, int), n
+        try:
+            return self.lines[n]
+        except (KeyError, IndexError):
+            if attempt_to_read and self.source_is_stream:
+                try:
+                    for l in self.source:
+                        if len(l) > self.max_width:
+                            self.max_width = len(l)
+                        self.lines.append(l)
+                        if len(self.lines) > n:
+                            break
+                except (UnicodeError, IOError):
+                    pass
+                return self._get_line(n, attempt_to_read=False)
+            return ""
+
+    def _generate_lines(self, starty, startx):
+        i = starty
+        if not self.source:
+            raise StopIteration
+        while True:
+            try:
+                line = self._get_line(i).expandtabs(4)
+                if self.markup is 'ansi':
+                    line = ansi.char_slice(line, startx, self.wid) + ansi.reset
+                else:
+                    line = line[startx:self.wid + startx]
+                yield line.rstrip()
+            except IndexError:
+                raise StopIteration
+            i += 1