From 18186da90e79e2c3d3407f98dfe5b7790117d8be Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 12 Mar 2021 11:28:57 +0530 Subject: [PATCH] Better error message for people running icat on systems with outdated/broken ImageMagick --- kittens/icat/main.py | 6 +++++- kittens/tui/images.py | 9 ++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/kittens/icat/main.py b/kittens/icat/main.py index 54d4c4826..e951b892d 100755 --- a/kittens/icat/main.py +++ b/kittens/icat/main.py @@ -28,7 +28,8 @@ from kitty.utils import ( from ..tui.images import ( ConvertFailed, Dispose, GraphicsCommand, NoImageMagick, OpenFailed, - RenderedImage, fsenc, identify, render_as_single_image, render_image + OutdatedImageMagick, RenderedImage, fsenc, identify, + render_as_single_image, render_image ) from ..tui.operations import clear_images_on_screen, raw_mode @@ -559,6 +560,9 @@ def main(args: List[str] = sys.argv) -> None: process_single_item(item, cli_opts, parsed_opts, url_pat) except NoImageMagick as e: raise SystemExit(str(e)) + except OutdatedImageMagick as e: + print(e.detailed_error, file=sys.stderr) + raise SystemExit(str(e)) except ConvertFailed as e: raise SystemExit(str(e)) except OpenFailed as e: diff --git a/kittens/tui/images.py b/kittens/tui/images.py index 6f19d2a57..cba5e852d 100644 --- a/kittens/tui/images.py +++ b/kittens/tui/images.py @@ -118,6 +118,13 @@ class NoImageMagick(Exception): pass +class OutdatedImageMagick(ValueError): + + def __init__(self, detailed_error: str): + super().__init__('ImageMagick on this system is too old ImageMagick 7+ required which was first released in 2016') + self.detailed_error = detailed_error + + last_imagemagick_cmd: Sequence[str] = () @@ -237,7 +244,7 @@ def render_image( f.canvas_width, f.canvas_height = map(positive_int, sz.split('x', 1)) f.canvas_x, f.canvas_y = map(int, pos.split('+', 1)) except Exception: - raise ValueError(f'Unexpected output filename: {x!r} produced by ImageMagick command: {last_imagemagick_cmd}') + raise OutdatedImageMagick(f'Unexpected output filename: {x!r} produced by ImageMagick command: {last_imagemagick_cmd}') f.path = output_prefix + f'-{index}.{m.mode}' os.rename(os.path.join(tdir, x), f.path) check_resize(f)