From ce224275e9fa1dbe5b612cbe587fe9da911999c9 Mon Sep 17 00:00:00 2001 From: Andrew Hamilton Date: Tue, 10 Jun 2025 16:57:44 +1000 Subject: [PATCH] coding style: Extract the paging code into its own context manager --- eris/__main__.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/eris/__main__.py b/eris/__main__.py index b7ac7db..32cc11a 100755 --- a/eris/__main__.py +++ b/eris/__main__.py @@ -1109,20 +1109,26 @@ def manage_cache(root_path): gitignore_file.write("*") +@contextlib.contextmanager +def print_to_pager(pager_command=["less", "-RFEX"]): + try: + pager_process = subprocess.Popen(pager_command, stdin=subprocess.PIPE, text=True) + except FileNotFoundError: + yield + else: + with contextlib.redirect_stdout(pager_process.stdin): + yield + pager_process.stdin.close() + pager_process.wait() + + def print_tool_info(): extensions_for_tool = {} for extensions, tools_ in tools.TOOLS_FOR_EXTENSIONS: for extension in extensions: for tool in tools_: extensions_for_tool.setdefault(tool, {extension}).add(extension) - pager_process = None - if shutil.which("less"): - pager_process = subprocess.Popen(["less", "-RFEX"], - stdin=subprocess.PIPE, text=True) - output_file = pager_process.stdin - else: - output_file = sys.stdout - with contextlib.redirect_stdout(output_file): + with print_to_pager(): for tool in sorted(tools.tools_all(), key=lambda t: t.__name__): print(termstr.TermStr(tool.__name__, is_bold=True) if tools.is_tool_available(tool) else termstr.TermStr(tool.__name__, fg_color=termstr.Color.red) + " (not available)") @@ -1134,9 +1140,6 @@ def print_tool_info(): extensions = list(extensions_for_tool.get(tool, {"*"})) print("extensions:", ", ".join(extensions)) print("") - if pager_process is not None: - output_file.close() - pager_process.wait() def install_all_tools():