accessibility
accessibility
¶
Small, optional macOS Accessibility adapter.
PyObjC is optional at import time. When AX is unavailable, callers can fall back to the clipboard-preserving paste path without weakening permissions.
Functions:¶
accessibility_works
¶
Si l'API d'accessibilité RÉPOND, pas si un drapeau dit qu'elle devrait.
accessibility_trusted() interroge AXIsProcessTrustedWithOptions,
qui peut répondre True pendant que chaque appel réel rend -25204
(kAXErrorAPIDisabled) — constaté ici : drapeau à True, insertion refusée
quatre fois de suite, y compris depuis le contexte launchd autorisé.
Le seul test qui ne ment pas est un appel véritable. Il coûte une fraction de milliseconde et évite d'annoncer une capacité absente — exactement le défaut que cette base a passé une semaine à retirer.
Source code in src/diapason/desktop/accessibility.py
insert_text
¶
Insert text at the focused UI element using AX selected-text.
Source code in src/diapason/desktop/accessibility.py
replace_previous
¶
Remplacer les count derniers caractères par text.
C'est la primitive de la dictée progressive : whisper relit tout le tampon à chaque passe et peut RÉVISER ce qu'il avait compris — « ca » devient « ça », « conte » devient « compte ». Il faut donc pouvoir défaire ce qu'on vient d'écrire.
On sélectionne la plage, puis on l'écrase. Aucune touche Retour arrière n'est simulée : une frappe synthétique traverse l'autocomplétion, les raccourcis et l'historique d'annulation de l'application, et ce qu'elle déclenche là-bas n'est pas prévisible. Déplacer une sélection, si.
Rend False sans rien tenter quand la plage n'est pas lisible — mieux vaut ne pas réviser que réviser au mauvais endroit, dans un document que l'utilisateur est en train d'écrire.
Source code in src/diapason/desktop/accessibility.py
paste_works
¶
Si le COLLAGE peut atteindre l'application au premier plan.
Chemin distinct de l'écriture directe, et c'est celui que la dictée
emprunte réellement : pbcopy puis Cmd-V par System Events. Il dépend
d'une autorisation différente de l'API AX brute — mesuré sur cette
machine, System Events répondait pendant que AXUIElementCopy… rendait
-25204.
Les confondre faisait annoncer « accessibilité REFUSÉE » à un service qui collait parfaitement : un message alarmant à propos de rien, qui envoie chercher un défaut là où il n'y en a pas.
Source code in src/diapason/desktop/accessibility.py
accessibility_remediation
¶
Quoi autoriser, et où — vide si l'API répond déjà.
Même piège que l'accès complet au disque : macOS attribue l'autorisation au binaire RÉSOLU, et le python d'un environnement virtuel est un lien symbolique. Autoriser le chemin qu'on a sous les yeux n'accorde donc rien, et rien ne le signale.