diff --git a/cli/src/zshell/__init__.py b/cli/src/zshell/__init__.py index 023f0ae..9c8c6b8 100644 --- a/cli/src/zshell/__init__.py +++ b/cli/src/zshell/__init__.py @@ -1,9 +1,11 @@ from __future__ import annotations +import os import sys from pathlib import Path import typer from typer._completion_shared import install, _get_shell_name +from typer._completion_classes import completion_init from zshell.subcommands import shell, scheme, screenshot, wallpaper, record app = typer.Typer(name="zshell-cli", add_completion=False) @@ -30,23 +32,26 @@ def _completion_installed() -> bool: def _install_completion() -> None: if _completion_installed(): print("zshell-cli: Shell completion already installed.") - raise typer.Exit() + sys.exit(0) shell = _get_shell_name() if shell is None: print("zshell-cli: Unable to detect shell type.", file=sys.stderr) - raise typer.Exit(code=1) + sys.exit(1) try: _, path = install(prog_name="zshell-cli") print(f"zshell-cli: Shell completion installed ({shell}: {path})") print("zshell-cli: Restart your shell or source the file to enable tab-completion.") - except Exception: - pass + except Exception as e: + print(f"zshell-cli: Failed to install shell completion: {e}", file=sys.stderr) + raise typer.Exit(code=1) def main() -> None: if "--install-autocomplete" in sys.argv: _install_completion() return + if "_ZSHELL_CLI_COMPLETE" in os.environ: + completion_init() if sys.stdout.isatty() and not _completion_installed(): print("zshell-cli: Tip: run with --install-autocomplete for tab completion.", file=sys.stderr) app()