hotfix zshell-cli shell show had no output #103

Merged
zach merged 5 commits from 100-cli-autocompletion into main 2026-05-26 18:50:27 +02:00
3 changed files with 23 additions and 16 deletions
+5 -6
View File
@@ -2,7 +2,6 @@ from __future__ import annotations
import sys
from pathlib import Path
import click
import typer
from typer._completion_shared import install, _get_shell_name
from zshell.subcommands import shell, scheme, screenshot, wallpaper, record
@@ -30,16 +29,16 @@ def _completion_installed() -> bool:
def _install_completion() -> None:
if _completion_installed():
click.echo("zshell-cli: Shell completion already installed.")
print("zshell-cli: Shell completion already installed.")
raise typer.Exit()
shell = _get_shell_name()
if shell is None:
click.echo("zshell-cli: Unable to detect shell type.", err=True)
print("zshell-cli: Unable to detect shell type.", file=sys.stderr)
raise typer.Exit(code=1)
try:
_, path = install(prog_name="zshell-cli")
click.secho(f"zshell-cli: Shell completion installed ({shell}: {path})", fg="green")
click.echo("zshell-cli: Restart your shell or source the file to enable tab-completion.")
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
@@ -49,5 +48,5 @@ def main() -> None:
_install_completion()
return
if sys.stdout.isatty() and not _completion_installed():
click.echo("zshell-cli: Tip: run with --install-autocomplete for tab completion.", err=True)
print("zshell-cli: Tip: run with --install-autocomplete for tab completion.", file=sys.stderr)
app()
+15 -8
View File
@@ -2,7 +2,6 @@ import subprocess
import sys
import time
import click
import typer
args = ["qs", "-c", "zshell"]
@@ -14,7 +13,8 @@ app = typer.Typer()
def kill():
result = subprocess.run(args + ["kill"], capture_output=True)
if result.returncode != 0:
raise click.ClickException("No running instance to kill.")
sys.stderr.write("No running instance to kill.\n")
sys.exit(1)
sys.stderr.write(result.stderr.decode())
@@ -23,10 +23,12 @@ def start_instance(no_daemon: bool = False) -> None:
stdout = result.stdout.decode().strip()
if stdout:
if "already running" in stdout.lower():
raise click.ClickException(stdout)
sys.stderr.write(stdout + "\n")
sys.exit(1)
if result.returncode != 0:
stderr = result.stderr.decode().strip()
raise click.ClickException(stderr)
sys.stderr.write(stderr + "\n")
sys.exit(1)
@app.command()
@@ -50,7 +52,9 @@ def restart(no_daemon: bool = False):
def show():
result = subprocess.run(args + ["ipc"] + ["show"], capture_output=True)
if result.returncode != 0:
raise click.ClickException(result.stderr.decode().strip())
sys.stderr.write(result.stderr.decode())
sys.exit(1)
sys.stdout.write(result.stdout.decode())
sys.stderr.write(result.stderr.decode())
@@ -58,7 +62,8 @@ def show():
def log():
result = subprocess.run(args + ["log"], capture_output=True)
if result.returncode != 0:
raise click.ClickException(result.stderr.decode().strip())
sys.stderr.write(result.stderr.decode())
sys.exit(1)
sys.stdout.write(result.stdout.decode())
sys.stderr.write(result.stderr.decode())
@@ -67,7 +72,8 @@ def log():
def lock():
result = subprocess.run(args + ["ipc"] + ["call"] + ["lock"] + ["lock"], capture_output=True)
if result.returncode != 0:
raise click.ClickException(result.stderr.decode().strip())
sys.stderr.write(result.stderr.decode())
sys.exit(1)
sys.stderr.write(result.stderr.decode())
@@ -75,5 +81,6 @@ def lock():
def call(target: str, method: str, method_args: list[str] = typer.Argument(None)):
result = subprocess.run(args + ["ipc"] + ["call"] + [target] + [method] + (method_args or []), capture_output=True)
if result.returncode != 0:
raise click.ClickException(result.stderr.decode().strip())
sys.stderr.write(result.stderr.decode())
sys.exit(1)
sys.stderr.write(result.stderr.decode())
+3 -2
View File
@@ -62,8 +62,9 @@ class TestStart:
class TestShow:
@patch("zshell.subcommands.shell.subprocess.run")
def test_show_runs_ipc_show(self, mock_run):
mock_run.return_value = CompletedProcess([], 0, b"", b"target visibilities\n")
invoke("show")
mock_run.return_value = CompletedProcess([], 0, b"target visibilities\n", b"")
result = invoke("show")
assert "target visibilities" in result.output
mock_run.assert_called_once_with(["qs", "-c", "zshell", "ipc", "show"], capture_output=True)