Files
z-bar-qt/cli/src/zshell/subcommands/shell.py
T
zach 1252bebf87
C++ / fmt (pull_request) Failing after 4s
C++ / build (pull_request) Failing after 10s
C++ / clang-tidy (pull_request) Failing after 10s
JS/TS / fmt (pull_request) Successful in 17s
JS/TS / lint (pull_request) Successful in 11s
Python / static (pull_request) Successful in 30s
Rust / build (pull_request) Successful in 53s
Python / verify (pull_request) Failing after 1m29s
Rust / fmt (pull_request) Successful in 40s
Rust / clippy (pull_request) Successful in 1m35s
chore: suppress more warnings
2026-10-25 01:58:45 +02:00

111 lines
2.5 KiB
Python

import os
import subprocess
import sys
import time
import typer
args = ["qs", "-c", "zshell"]
app = typer.Typer()
qt_logging_rules = (
"qt.qml.warning=false;"
"qt.qpa.wayland.*=false;"
"scene=false;"
"quickshell.service.sni.watcher=false;"
"default.warning=false;"
"default.info=false;"
"qt.sql.qsqldatabase"
)
@app.command()
def kill():
result = subprocess.run([*args, "kill"], capture_output=True)
if result.returncode != 0:
sys.stderr.write("No running instance to kill.\n")
sys.exit(1)
sys.stderr.write(result.stderr.decode())
def start_instance(no_daemon: bool = False) -> None:
env = os.environ.copy()
env["QT_LOGGING_RULES"] = qt_logging_rules
result = subprocess.run(
args + ["-n"] + ([] if no_daemon else ["-d"]),
capture_output=True,
env=env,
)
stdout = result.stdout.decode().strip()
if stdout and "already running" in stdout.lower():
sys.stderr.write(stdout + "\n")
sys.exit(1)
if result.returncode != 0:
stderr = result.stderr.decode().strip()
sys.stderr.write(stderr + "\n")
sys.exit(1)
@app.command()
def start(no_daemon: bool = False):
start_instance(no_daemon)
@app.command()
def restart(no_daemon: bool = False):
subprocess.run([*args, "kill"], capture_output=True)
deadline = time.monotonic() + 2.5
while time.monotonic() < deadline:
result = subprocess.run([*args, "kill"], capture_output=True)
if result.returncode == 255:
break
time.sleep(0.25)
start_instance(no_daemon=no_daemon)
@app.command()
def show():
result = subprocess.run([*args, "ipc", "show"], capture_output=True)
if result.returncode != 0:
sys.stderr.write(result.stderr.decode())
sys.exit(1)
sys.stdout.write(result.stdout.decode())
sys.stderr.write(result.stderr.decode())
@app.command()
def log():
result = subprocess.run([*args, "log"], capture_output=True)
if result.returncode != 0:
sys.stderr.write(result.stderr.decode())
sys.exit(1)
sys.stdout.write(result.stdout.decode())
sys.stderr.write(result.stderr.decode())
@app.command()
def lock():
result = subprocess.run(
[*args, "ipc", "call", "lock", "lock"], capture_output=True
)
if result.returncode != 0:
sys.stderr.write(result.stderr.decode())
sys.exit(1)
sys.stderr.write(result.stderr.decode())
@app.command()
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:
sys.stderr.write(result.stderr.decode())
sys.exit(1)
sys.stderr.write(result.stderr.decode())