Python-programtillegg¶
Modular Text Editor laster inn Python-programtillegg side om side med innebygde
C++-programtillegg gjennom den samme flaten for å styre programtillegg. Et
Python-programtillegg er en mappe som inneholder én plugin.json og minst én .py-fil
med en register(ctx)-funksjon på øverste nivå.
Redigereren starter en liten arbeiderunderprosess per programtillegg, kjører
register(ctx) inne i den, og sender kommandoer, menyer og hendelser fram og tilbake over
en RPC-kanal. Programtillegget ditt rører aldri Qt eller Scintilla — ctx-objektet er et
alminnelig tjenestekatalog i Python.
Hva som virker i dag (fase 1–5: funksjonelt fullstendig)
Fase 1: kommandoer, menyposter, hendelsesabonnementer (åpne / lukke / lagre / aktivt dokument endret / merking endret / programmet avslutter), loggen og statuslinjen.
Fase 2: redigererbuffer, merking, markør, søk, innrykk og filhandlinger gjennom
ctx.editor.*, varige innstillinger gjennom ctx.settings.* og skrivebeskyttede
programinnstillinger gjennom ctx.app_settings.*, fullføringsleverandører (med en
kort frist per tastetrykk) gjennom @ctx.completions.provider(...), og
ctx.data_dir() for den skrivbare mappen per programtillegg.
Fase 3: deklarative dokkpaneler gjennom ctx.docks.add_panel(...),
innstillingssider gjennom ctx.settings_page.register(...), begge bygget av
mte.ui-skjemabyggere, og tilgang til kontroller under kjøringen gjennom
ctx.ui.get / ctx.ui.set.
Fase 4: installasjonsprogram for .mteplugin-pakker — pakk programtilleggsmappen
din som en zip, og installer den fra Innstillinger → Programtillegg (se
Pakking).
Fase 5: virtuelle miljøer per programtillegg — erklær pip-avhengigheter i
pyRequires, så setter redigereren opp et virtuelt miljø for programtillegget ditt
ved første oppstart (se Avhengigheter); en
permissions-erklæring som vises på programtilleggssiden; og et RPC-underlag med
strømming og avbrytelse (ennå ingen API som vender mot programtillegg — det ligger til
grunn for framtidige KI-tjenester).
Et minimalt programtillegg¶
Lag <any-folder>/hello/ med disse to filene.
{
"id": "org.example.hello",
"name": "Hello (Python)",
"version": "1.0.0",
"apiVersion": 1,
"entry": "python",
"module": "main",
"menus": [
{ "title": "Plugins", "barPriority": 570, "itemPriority": 100 }
]
}
import mte # noqa: F401
def register(ctx):
@ctx.commands.command(id="hello.sayHi",
title="Say Hi",
shortcut="Ctrl+Alt+H")
def _say_hi():
ctx.status.show("Hello from Python!", timeout_ms=3000)
ctx.log.info("hello: Say Hi invoked")
ctx.menus.add_item("Plugins/Hello/Say Hi", "hello.sayHi")
Pakk mappen som en zip ved navn hello.mteplugin, og installer den via
Innstillinger → Programtillegg → Installer programtillegg... — eller legg mappen i
programtilleggsmappen din per bruker for hånd (se Pakking). Start
redigereren på nytt, så kommer Plugins → Hello → Say Hi fram på menylinjen.
Hva du trenger på maskinen¶
- En Python 3.9+-tolk som kan nås på en av to måter:
- i
PATH(py.exe,python.exeellerpython3.exepå Windows;python3på macOS og Linux), eller - utpekt av miljøvariabelen
MTE_PYTHON(enten en absolutt sti til enpython.exeeller bare et navn å slå opp iPATH).
- i
- Ingen pip-pakker: klientbiblioteket
mtefra fase 1 følger med redigereren og legges isys.pathfor deg.
Redigereren noterer ved oppstart hvilken tolk den valgte:
PluginHost: MTE_PYTHON is not set; falling back to PATH.
PluginHost: located Python on PATH: py.exe -> C:/Windows/py.exe
PluginHost: Python plugin backend enabled; interpreter=..., worker=.../mte_python_host.py
Ser du Python plugins disabled, så gå til Feilsøking.
Hva programtillegget ditt kan¶
Hvert punkt nedenfor lenker til sitt API-avsnitt:
| Evne | Avsnitt |
|---|---|
| Registrere kommandoer (med en valgfri hurtigtast) | ctx.commands |
| Bidra med menyposter og skillelinjer | ctx.menus |
| Abonnere på hver redigererhendelse (dokumenter, tekst, merking, innstillinger, tema, arbeidsområde …) og publisere dem om arbeidsområdet | ctx.events og Hendelsesdokumentasjon |
| Skrive til redigererens diagnostikkstrøm | ctx.log |
| Sende forbigående meldinger til statuslinjen og eie et varig avsnitt i den | ctx.status |
| Lese og endre buffere, merkinger (også med flere markører), markøren, filer, søk, bokmerker, merker, URL-utheving, innrykk og grupper i delt visning | ctx.editor |
| Liste språk, lese og bytte et dokuments språk og bidra med en språkdefinisjon | ctx.languages |
Lagre oppsett per programtillegg, lese innstillinger for hele programmet (mte.keys) og lese innstillinger per dokument i lag med .editorconfig |
ctx.settings / ctx.app_settings / ctx.document_settings |
| Publisere diagnostikk (bølgelinjer og margtegn) | ctx.diagnostics |
| Registrere farger for ditt eget grensesnitt som kan inngå i temaer | ctx.theme |
| Åpne sammenligningsvisningen side ved side | ctx.compare |
| Registrere en fullføringsleverandør (med en frist per tastetrykk) | ctx.completions |
| Finne den skrivbare mappen din per programtillegg | ctx.data_dir() |
| Legge til et deklarativt dokkpanel og vise eller skjule det fra en kommando | ctx.docks og mte.ui |
| Legge til en side under Innstillinger | ctx.settings_page |
| Lese og skrive panelkontroller under kjøringen | ctx.ui |
| Slå et varig kryss av og på i en menypost | ctx.menus.set_item_checked |
| Nedtone en menypost mens kommandoen dens ikke kan kjøre | ctx.menus.set_item_enabled |
Videre herfra¶
- Dokumentasjon av
plugin.json— hvert felt, og hva det gjør. - Dokumentasjon av
ctx-API-et — metode for metode for hverctx-tjeneste. - Hendelsesdokumentasjon — tabellen over emne ↔ dataklasse.
- Pakking — hvor programtilleggsmapper hører hjemme på disken.
- Feilsøking — å tyde vertens loggelinjer.
- Å skrive med Claude — en kompakt veiledning du kan gi til en KI-assistent, så den lager et programtillegg for deg.