summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames E. Blair <corvus@gnu.org>2016-11-20 12:27:59 -0800
committerJames E. Blair <corvus@gnu.org>2016-11-20 12:27:59 -0800
commit3e4efbb2e0eb1ee33b0157468682b6aceffbadfe (patch)
treec176566b1e666260f969763e6724fecc90f6cd53
parent4c3c4ff03183b914750e889202435bc558933898 (diff)
downloadpresentty-3e4efbb2e0eb1ee33b0157468682b6aceffbadfe.tar.gz
presentty-3e4efbb2e0eb1ee33b0157468682b6aceffbadfe.tar.xz
presentty-3e4efbb2e0eb1ee33b0157468682b6aceffbadfe.zip
Fail gracefully if jp2a is not installed
-rw-r--r--presentty/image.py47
1 files changed, 33 insertions, 14 deletions
diff --git a/presentty/image.py b/presentty/image.py
index 2dbd9ad..939536f 100644
--- a/presentty/image.py
+++ b/presentty/image.py
@@ -43,6 +43,9 @@ class ANSIImage(urwid.Widget):
scale = 1
self.scale = scale
self.background = background or 'black'
+ self._prime = True
+ self.render((3,1))
+ self._prime = False
def _loadImage(self):
image = PIL.Image.open(self.uri)
@@ -83,6 +86,12 @@ class ANSIImage(urwid.Widget):
r = self.pack(size)
return r[1]
+ def _blank(self, width, height):
+ ret = []
+ for y in range(height):
+ ret.append("<span style='color:#000000; background-color:#000000;'>%s</span>" % ('.'*width))
+ return '<br/>'.join(ret)
+
SPAN_RE = re.compile(r"<span style='color:#(......); background-color:#(......);'>(.*)")
def render(self, size, focus=False):
spanre = self.SPAN_RE
@@ -99,20 +108,30 @@ class ANSIImage(urwid.Widget):
right_pad = total_width - width - left_pad
padding_attr = urwid.AttrSpec(self.background, self.background)
- jp2a = subprocess.Popen(['jp2a', '--colors', '--fill',
- '--width=%s' % width,
- '--height=%s' % height,
- '--html-raw', '-'],
- stdin=subprocess.PIPE,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- image = self._loadImage()
- image = image.convert('RGBA')
- image.save(jp2a.stdin, 'JPEG')
- jp2a.stdin.close()
- data = jp2a.stdout.read()
- jp2a.stderr.read()
- jp2a.wait()
+ try:
+ jp2a = subprocess.Popen(['jp2a', '--colors', '--fill',
+ '--width=%s' % width,
+ '--height=%s' % height,
+ '--html-raw', '-'],
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ except OSError, e:
+ if self._prime:
+ if e.errno == 2:
+ print("ERROR: jp2a is used but is not installed.")
+ else:
+ print("ERROR: unable to run jp2a: %s" % e)
+ raw_input("Press ENTER to continue.")
+ data = self._blank(width, height)
+ else:
+ image = self._loadImage()
+ image = image.convert('RGBA')
+ image.save(jp2a.stdin, 'JPEG')
+ jp2a.stdin.close()
+ data = jp2a.stdout.read()
+ jp2a.stderr.read()
+ jp2a.wait()
line_list = []
attr_list = []