From 543455e1c6a1e3ae90ace978bf87e167a8c2993a Mon Sep 17 00:00:00 2001 From: Lionel Dricot Date: Tue, 15 Mar 2022 16:23:44 +0100 Subject: [PATCH] starting refactorisation to support better chafa --- offpunk.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/offpunk.py b/offpunk.py index f6eb0ad..8000dc3 100755 --- a/offpunk.py +++ b/offpunk.py @@ -364,13 +364,13 @@ class AbstractRenderer(): def prepare(self,body,mode=None): return body - def get_body(self,readable=True,width=None): + def get_body(self,readable=True,width=None,mode=None): if not width: width = term_width() if self.rendered_text == None or not readable: - if readable : + if not mode and readable : mode = "readable" - else : + elif not mode : mode = "full" prepared_body = self.prepare(self.body,mode=mode) result = self.render(prepared_body,width=width,mode=mode) @@ -378,6 +378,9 @@ class AbstractRenderer(): self.rendered_text = result[0] self.links = result[1] return self.rendered_text + + def display_cmd(self): + return less_cmd # An instance of AbstractRenderer should have a self.render(body,width,mode) method. # 3 modes are used : readable (by default), full and links_only (the fastest, when # rendered content is not used, only the links are needed) @@ -701,6 +704,8 @@ class ImageRenderer(AbstractRenderer): def get_title(self): return "Picture file" def render(self,img,width=None,mode=None): + #with inline, we use symbols to be rendered with less. + #else we use the best possible renderer. if mode == "links_only": return "", [] if not width: @@ -709,14 +714,17 @@ class ImageRenderer(AbstractRenderer): else: spaces = int((term_width() - width)//2) try: + cmd = "chafa --bg white -s %s -w 1 "%width + #if mode=="inline": + cmd += "-f symbols " if _NEW_CHAFA: - cmd = "chafa --animate=off -f symbols --bg white -s %s -w 1 \"%s\"" %(width,img) + cmd += "--animate=off " else: img_obj = Image.open(img) if hasattr(img_obj,"n_frames") and img_obj.n_frames > 1: # we remove all frames but the first one img_obj.save(img,save_all=False) - cmd = "chafa --bg white -f symbols -s %s -w 1 \"%s\"" %(width,img) + cmd += "\"%s\""%img return_code = subprocess.run(cmd,shell=True, capture_output=True) ansi_img = return_code.stdout.decode() except Exception as err: @@ -783,7 +791,7 @@ class HtmlRenderer(AbstractRenderer): size = 40 else: size = width - ansi_img = "\n" + renderer.get_body(width=size) + ansi_img = "\n" + renderer.get_body(width=size,mode="inline") except Exception as err: #we sometimes encounter really bad formatted files or URL ansi_img += "[BAD IMG] %s"%src