From 9b9eae7923927981c1aec3c2e9202763dc29cef2 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 8 Jan 2022 10:22:22 +0530 Subject: [PATCH] icat: Fix --hold not working with critical errors --- kittens/icat/main.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/kittens/icat/main.py b/kittens/icat/main.py index 5f9a62d45..8c090cd3d 100755 --- a/kittens/icat/main.py +++ b/kittens/icat/main.py @@ -550,16 +550,26 @@ def main(args: List[str] = sys.argv) -> None: raise SystemExit(f'The --place option can only be used with a single image, not {items}') sys.stdout.buffer.write(b'\0337') # save cursor url_pat = re.compile(r'(?:https?|ftp)://', flags=re.I) + + def hold_if_needed(exit_code_or_msg: Union[int, str]) -> None: + if cli_opts.hold: + if isinstance(exit_code_or_msg, str): + print(exit_code_or_msg, file=sys.stderr, flush=True) + exit_code_or_msg = 1 + with open(os.ctermid()) as tty, raw_mode(tty.fileno()): + tty.buffer.read(1) + raise SystemExit(exit_code_or_msg) + for item in items: try: process_single_item(item, cli_opts, parsed_opts, url_pat) except NoImageMagick as e: - raise SystemExit(str(e)) + hold_if_needed(str(e)) except OutdatedImageMagick as e: print(e.detailed_error, file=sys.stderr) - raise SystemExit(str(e)) + hold_if_needed(str(e)) except ConvertFailed as e: - raise SystemExit(str(e)) + hold_if_needed(str(e)) except OpenFailed as e: errors.append(e) if parsed_opts.place: @@ -567,11 +577,8 @@ def main(args: List[str] = sys.argv) -> None: if errors: for err in errors: print(err, file=sys.stderr) - if cli_opts.hold: - with open(os.ctermid()) as tty: - with raw_mode(tty.fileno()): - tty.buffer.read(1) - raise SystemExit(1 if errors else 0) + hold_if_needed(1 if errors else 0) + raise SystemExit() if __name__ == '__main__':