Hendelsesdokumentasjon¶
Hver hendelse verten publiserer for innebygde programtillegg (PluginEvents.h), når også
fram til Python, med ett unntak som er nevnt nedenfor. Hvert emne leverer en liten typet
dataklasse til behandleren din. Dataklassene er definert i Python/mte/events.py og kan
importeres fra mte-pakken på øverste nivå.
Tabell over emne ↔ dataklasse¶
| Emne | Innholdets dataklasse | Felter | Dekorator |
|---|---|---|---|
document.opened |
mte.DocumentOpened |
document: int, path: str |
on_document_opened |
document.closed |
mte.DocumentClosed |
document: int |
on_document_closed |
document.saved |
mte.DocumentSaved |
document: int |
on_document_saved |
document.encodingChanged |
mte.DocumentEncodingChanged |
document: int, encoding: mte.DocumentEncoding |
on_document_encoding_changed |
document.lineEndingChanged |
mte.DocumentLineEndingChanged |
document: int, ending: mte.LineEnding |
on_document_line_ending_changed |
document.modifiedChanged |
mte.DocumentModifiedChanged |
document: int, modified: bool |
on_document_modified_changed |
document.activeChanged |
mte.ActiveDocumentChanged |
document: int |
on_active_document_changed |
text.changed |
mte.TextChanged |
document, position, added_bytes, removed_bytes |
on_text_changed |
selection.changed |
mte.SelectionChanged |
document: int |
on_selection_changed |
settings.changed |
mte.SettingsChanged |
scope: str ("" = hele redigereren, "plugins/<id>") |
on_settings_changed |
theme.changed |
mte.ThemeChanged |
variant: str ("light" / "dark" / "") |
on_theme_changed |
margin.clicked |
mte.MarginClicked |
document: int, line: int, margin: str ("symbol"), modifiers: int (biter mte.MODIFIER_SHIFT / MODIFIER_CONTROL / MODIFIER_ALT / MODIFIER_META) — et klikk i bokmerkekolonnen, se ctx.line_markers |
on_margin_clicked |
workspace.rootChanged |
mte.WorkspaceRootChanged |
root: str ("" = mappen ble lukket) |
on_workspace_root_changed |
workspace.filesChanged |
mte.WorkspaceFilesChanged |
files: list[mte.WorkspaceFile] (path, display_path) |
on_workspace_files_changed |
command.shortcutChanged |
mte.CommandShortcutChanged |
command_id: str, sequence: str |
on_command_shortcut_changed |
host.windowShown |
mte.HostWindowShown |
(ingen felter) — én gang per kjøring, etter det første bildet | on_host_window_shown |
app.aboutToQuit |
mte.AppAboutToQuit |
(ingen felter) | on_app_about_to_quit |
document er en ugjennomsiktig heltalls-id som verten tildeler. Sammenlign id-er med
==; ta dem ikke vare på på tvers av omstarter av redigereren. text.changed utløses ved
hver endring — hold den behandleren helt enkel.
Å abonnere med den lette dekoratoren¶
Anbefalt — dekoratorens navn passer til emnet, og innholdets type utledes:
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")
Å abonnere med det rå API-et¶
def _saved(ev):
ctx.log.info(f"saved {ev.document}")
handler_id = ctx.events.subscribe("document.saved", _saved)
- Gir den lokalt tildelte
handler_idtilbake (en"py-ev/N"-tekststreng). - Ukjente emner kaster
ValueErrorved abonneringen — ingen stille ingenting.
Meld deg av når du ikke lenger er interessert:
Merk: etter unsubscribe slutter verten å levere emnet til deg, men arbeiderens lokale
fordeler beholder posten sin inntil programtillegget stenges ned. Regn ikke med
unsubscribe til å rydde opp i minnet — det er et signal om retningslinjer og ikke en
byggestein for søppelrydding.
Leveringens vilkår¶
- Hendelser utløses etter at den tilsvarende handlingen er fullført. Ved
document.saveder filen alt på disken. Veddocument.closeder dokumentets id alt ugyldig. - Flere abonnenter på det samme emnet utløses alle sammen, i udefinert rekkefølge.
- Unntak som kastes i behandleren din, fanges av arbeideren og skrives til stderr (synlig
i vertens logg som
[worker stderr] …). En behandler som oppfører seg galt, hindrer ikke de andre abonnentene i å bli utløst. - Innholdets dataklasser kan ikke endres; endre ikke felter på
ev.
Å publisere¶
ctx.events.publish(topic, payload) kringkaster til både innebygde og Python-abonnenter —
det tas bare imot for de to emnene om arbeidsområdet (workspace.rootChanged,
workspace.filesChanged), som Arbeidsområde-programtillegget kringkaster til Søk i filer
og kommandopaletten:
ctx.events.publish("workspace.rootChanged", {"root": "/home/me/project"})
ctx.events.publish("workspace.filesChanged", {"files": [
{"path": "/home/me/project/a.txt", "displayPath": "a.txt"},
]})
Ethvert annet emne kaster ValueError: resten er vertens egne utsagn om hva som har
skjedd (et dokument ble lagret, temaet endret seg), og som et programtillegg ikke har
noen grunn til å påstå. Vil du ha meldinger mellom programtillegg utover disse, så
registrer en kommando, og la den andre siden kalle den.
Ikke tilgjengelig¶
To vertshendelser har ikke noe Python-emne:
document.aboutToSave: verten publiserer den synkront, mens lagringen er sperret inntil hver abonnent vender tilbake, og å innfri det over arbeider-RPC-en krever den samme behandlingen med frister som fullføringsleverandører, før det er trygt. Innebygde programtillegg kan bruke den i dag.DocumentAboutToClose— bare for innebygde programtillegg, med vilje. Hele løftet er at dokumentet fortsatt kan leses inne i behandleren, og leveringen til et Python-programtillegg er asynkron, så behandleren ville kjøre etter at dokumentet er lukket. Brukdocument.closedi stedet, og hold det du trenger å vite om et dokument oppdatert ut fra de tidligere hendelsene i stedet for å lese det ved lukking.