# window_info.py """ Récupération des informations sur la fenêtre active (X11). v0 : - utilise xdotool pour obtenir : - le titre de la fenêtre active - le PID de la fenêtre active, puis le nom du process via ps Si quelque chose ne fonctionne pas, on renvoie des valeurs "unknown". """ from __future__ import annotations import subprocess from typing import Dict, Optional def _run_cmd(cmd: list[str]) -> Optional[str]: """Exécute une commande et renvoie la sortie texte (strippée), ou None en cas d'erreur.""" try: out = subprocess.check_output(cmd, stderr=subprocess.DEVNULL) return out.decode("utf-8", errors="ignore").strip() except Exception: return None def get_active_window_info() -> Dict[str, str]: """ Renvoie un dict : { "title": "...", "app_name": "..." } Nécessite xdotool installé sur le système. """ title = _run_cmd(["xdotool", "getactivewindow", "getwindowname"]) pid_str = _run_cmd(["xdotool", "getactivewindow", "getwindowpid"]) app_name: Optional[str] = None if pid_str: pid_str = pid_str.strip() # On récupère le nom du binaire via ps app_name = _run_cmd(["ps", "-p", pid_str, "-o", "comm="]) if not title: title = "unknown_window" if not app_name: app_name = "unknown_app" return { "title": title, "app_name": app_name, }