Référence des événements¶
La phase 1 prend en charge six sujets d'événements. Chaque sujet livre une
petite dataclass typée à votre gestionnaire. Les dataclasses sont définies
dans Python/mte/events.py et importables depuis le paquet de premier niveau
mte.
Table sujet ↔ dataclass¶
| Sujet | Dataclass de charge utile | Champs |
|---|---|---|
document.opened |
mte.DocumentOpened |
document: int, path: str |
document.closed |
mte.DocumentClosed |
document: int |
document.saved |
mte.DocumentSaved |
document: int |
selection.changed |
mte.SelectionChanged |
document: int |
document.activeChanged |
mte.ActiveDocumentChanged |
document: int |
app.aboutToQuit |
mte.AppAboutToQuit |
(aucun champ) |
document est un identifiant entier opaque attribué par l'hôte. Comparez les
identifiants avec == ; ne les persistez pas entre redémarrages de
l'éditeur.
S'abonner via le décorateur sucré¶
Recommandé pour les sujets fixes de la phase 1 — le nom du décorateur correspond au sujet et le type de la charge utile est inféré :
import mte
def register(ctx):
@ctx.events.on_document_saved
def _saved(ev: mte.DocumentSaved):
ctx.log.info(f"saved doc {ev.document}")
@ctx.events.on_document_opened
def _opened(ev: mte.DocumentOpened):
ctx.log.info(f"opened {ev.document} at {ev.path}")
@ctx.events.on_app_about_to_quit
def _quit(_ev: mte.AppAboutToQuit):
ctx.log.info("editor is closing")
S'abonner via l'API brute¶
def _saved(ev):
ctx.log.info(f"saved {ev.document}")
handler_id = ctx.events.subscribe("document.saved", _saved)
- Renvoie le
handler_idalloué localement (une chaîne"py-ev/N"). - Les sujets inconnus lèvent
ValueErrorà l'abonnement — pas d'échec silencieux.
Désabonnez-vous quand cela ne vous intéresse plus :
Remarque : après unsubscribe, l'hôte cesse de vous livrer le sujet, mais le
répartiteur local du worker garde son entrée jusqu'à l'arrêt de l'extension.
Ne comptez pas sur unsubscribe pour libérer de la mémoire — c'est un signal
de politique, pas une primitive de ramasse-miettes.
Sémantique de livraison¶
- Les événements se déclenchent après l'achèvement de l'action
correspondante. Sur
document.saved, le fichier est déjà sur le disque. Surdocument.closed, l'identifiant du document est déjà invalide. - Plusieurs abonnés au même sujet se déclenchent tous, dans un ordre indéfini.
- Les exceptions levées dans votre gestionnaire sont interceptées par le
worker et écrites sur stderr (visibles dans le journal de l'hôte comme
[worker stderr] …). Un gestionnaire défaillant n'empêche pas les autres abonnés de se déclencher. - Les dataclasses de charge utile sont immuables ; ne modifiez pas les
champs de
ev.
Pas encore disponible¶
PYTHON_PLUGIN_ARCHITECTURE.md §6.3 liste des sujets publiés par l'hôte qui
ne sont pas encore exposés à Python : document.aboutToSave,
text.changed, document.modifiedChanged, settings.changed,
workspace.rootChanged, workspace.filesChanged, theme.changed. Ils
seront ajoutés progressivement à mesure que les dataclasses côté Python
seront implémentées ; le côté C++ les expose déjà aux extensions natives.
La publication de vos propres événements personnalisés vers d'autres extensions sur le bus partagé est prévue pour la phase 2 mais pas câblée en phase 1.